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