Юнит-тесты Приемочные-тесты? - PullRequest
2 голосов
/ 15 сентября 2010

В настоящее время я делаю некоторые приемочные тесты, которые помогут разработать программу, которую я собираюсь сделать.Все выглядит хорошо, за исключением того, что я понял, что приемочные тесты довольно сложны, то есть, хотя они концептуально просты, для их запуска требуется довольно сложный код.Мне нужно будет сделать пару «вспомогательных» классов для моих приемочных испытаний.

Мой вопрос заключается в том, как их разработать:-Тесты (это кажется странным - кто-нибудь делал что-нибудь подобное?)

Проведите юнит-тесты для этих классов помощи.После того, как я выполнил весь код этих классов справки, я могу пройти и начать работу над реальными модульными тестами моей системы.При использовании этого подхода, куда бы вы поместили вспомогательные классы?В проекте тестов или в реальном проекте?Они не обязательно имеют зависимости от тестирующих / проверяющих фреймворков. Любая другая идея?

Ответы [ 4 ]

5 голосов
/ 15 сентября 2010

Друг очень заинтересован в том, что приемочные тесты сообщают вам, не сломан ли ваш код, в то время как модульные тесты сообщают вам , где , он сломан; это дополнительные и ценные биты информации. Приемочные тесты лучше сообщают, когда вы закончите.

Но чтобы закончить, вам нужны все кусочки по пути; вам нужно, чтобы они работали, и это то, чем хороши юнит-тесты. Выполните тест сначала, они также приведут вас к лучшему дизайну (не только коду, который работает). Хороший подход - написать приемочный тест для широкой картины и сказать себе: «когда это пройдет, я готов». Затем поработайте над тем, чтобы он прошел, работающий TDD: напишите небольшой модульный тест для следующей функциональности, необходимой для прохождения AT; написать код, чтобы он прошел; рефакторинга; повторение. По мере продвижения время от времени запускайте AT; вы, вероятно, обнаружите его сбой позже и позже в тесте. И, как уже упоминалось выше, когда это проходит, все готово.

Я не думаю, что юнит-тестирование самого приемочного теста имеет большой смысл. Но модульное тестирование его вспомогательных классов - на самом деле, написание их test-first - это очень хороший способ. Скорее всего, вы обнаружите, что некоторые методы, которые вы пишете «просто для теста», встраиваются в производственный код - и даже если вы этого не сделаете, вы все равно хотите знать, что код, используемый вашим AT, работает правильно. *

Если ваша AT достаточно проста, старой поговорки «тест проверяет код, а код тестирует тест», вероятно, достаточно - когда у вас провальный тест, это либо потому, что код неправильный, либо потому что тест неправильно, и это должно быть достаточно легко, чтобы выяснить, какой. Но когда тест усложняется, хорошо также проверить его основы.

2 голосов
/ 08 октября 2010

Если вы думаете о разработке программного обеспечения как о заводе по производству автомобилей, то процесс написания программного обеспечения похож на разработку нового автомобиля.Каждый компонент тестируется отдельно, потому что он новый.Это никогда не было сделано раньше.(Если это так, вы можете либо получить людей, которые делали это раньше, либо купить их с полки.)

Ваша система сборки, которая собирает ваше программное обеспечение и также тестирует его, похожа на конвейерную ленту -процесс, который производит автомобиль после автомобиля после автомобиля.Производители автомобилей обычно рассматривают, как они собираются автоматизировать производство новых компонентов и тестировать свои автомобили, как часть создания новых, и вы можете поспорить, что они также тестируют машины, которые производят эти автомобили.

Итак, дамодульное тестирование ваших приемочных тестов мне кажется вполне подходящим, особенно если оно помогает вам двигаться быстрее и облегчает изменения.

2 голосов
/ 15 сентября 2010

Нет ничего плохого в использовании среды модульных тестов (например, JUnit) для написания приемочных тестов (или интеграционных тестов).Люди не любят называть их «модульными тестами» по многим причинам.Для меня основная причина заключается в том, что интеграционные / приемочные тесты не будут запускаться каждый раз, когда проверяются изменения (слишком длинные или / и нет подходящей среды).

Ваши вспомогательные классы - это довольно стандартная вещь, которая включает в себя "тесткод инфраструктуры ".Они не принадлежат нигде, кроме тестового кода.Это ваш выбор, чтобы проверить их или нет.Но без них ваши тесты не будут осуществимы в больших системах.

Итак, ваш выбор - №2 или тесты вообще не проводятся.Нет ничего плохого в рефакторинге кода инфраструктуры, чтобы сделать его более прозрачным и простым.

1 голос
/ 15 сентября 2010

Ваш вариант 2 - способ, которым я бы сделал это: напишите вспомогательные классы test-first - похоже, вы знаете, что они должны делать.

Тесты - это тесты, и хотя вспомогательные классы не являютсястрого тесты, они не будут ссылаться на ваш основной код, только тесты, поэтому они принадлежат тестам.Возможно, они могут находиться в отдельном пакете / пространстве имен от обычных тестов.

...