За последний год или около того я разрабатывал свои отбивные TDD, так что теперь я довольно хорошо разбираюсь в основных моментах - сначала пишу тесты, фальшивые фреймворки, тестирование как можно более мелких вещей, DI и т.д.
Однако я чувствую, что все еще есть много вещей, которые я не получаю от модульного тестирования.
Например, я часто нахожу, что модульное тестирование таким образом не проверяет интеграцию и общую картину того, что должен делать мой код. Со всем насмешливым я нахожу, что я теряю из виду, проверяют ли тестируемые методы результаты, которые мне действительно нужны, а не только те результаты, которые, как они говорят, предоставят. Когда я начинаю двигаться к BDD, я нахожу, что эта проблема только усугубляется, что приводит к растратному времени разработки и неэффективным тестам.
Другая проблема заключается в том, что модульные тесты требуют большого объема обслуживания, чтобы поддерживать их упорядоченно, замедляя рефакторинг.
Когда я впервые начал модульное тестирование, как и большинство людей, я обнаружил, что то, что я писал, было действительно интеграционными тестами. Однако было много преимуществ для этих тестов - их было гораздо легче читать и действовать как достойная документация по API программ. Они также склонны улавливать проблему реального мира гораздо быстрее, чем отдельные тесты, которые, как я считаю, тратят много времени на таргетинг на крайние случаи, которые возникают только при неправильном использовании API (например, нулевые ссылки, деления на 0 и т.д.).
Каковы ваши мысли? Можете ли вы рекомендовать хорошие книги, статьи или практики, которые занимаются более продвинутым модульным тестированием и поддержанием производительности и эффективности?
РЕДАКТОР: Просто немного следуйте вопросам, учитывая ответы: Так что в основном вы говорите, что, несмотря на то, что все это тестирование "я" не тестирую код... на который я отвечаю: "Но я хочу проверить код dang!" Фактически, когда я написал множество "более тяжелых" тестов интеграции, я обнаружил, что мой код, как правило, достиг более корректного состояния, а ошибки были идентифицированы намного раньше. Можно ли достичь этого без проблем ремонтопригодности интеграционных тестов?