Модульные тесты не только облегчают разработку, но и являются одним из их ключевых преимуществ.
Написание test-first устраняет модульность и чистую структуру кода.
Когда вы пишете свой код сначала в тестовом режиме, вы обнаружите, что любые «условия» данного блока кода естественным образом вытесняются в зависимости (обычно через макеты или заглушки), когда вы принимаете их в своем коде.
«При заданном условии x ожидаемое поведение y» часто становится заглушкой для поставки x
(что является сценарием, в котором тест должен проверять поведение текущего компонента) и y
становится имитацией, вызов которой будет проверен в конец теста (если это не «должен возвращаться y
», в этом случае тест просто будет явно проверять возвращаемое значение).
Затем, когда этот модуль ведет себя так, как указано, вы переходите к записи зависимостей (для x
и y
), которые вы обнаружили.
Это делает написание чистого, модульного кода очень простым и естественным процессом, в противном случае зачастую легко распутать обязанности и объединить поведение, не осознавая этого.
Написание тестов позже скажет вам, когда ваш код плохо структурирован.
Когда написание тестов для части кода становится трудным, потому что слишком много вещей, которые нужно заглушить или смоделировать, или потому что вещи слишком тесно связаны друг с другом, вы знаете, что нужно внести улучшения в свой код.
Когда «смена тестов» становится обузой, потому что в одном модуле так много поведений, вы знаете, что вам нужно внести улучшения в свой код (или просто в свой подход к написанию тестов - но в моем опыте это обычно не так) ,
Когда ваши сценарии становятся слишком сложными ( «если x
и y
и z
затем ...») , потому что вам нужно абстрагировать больше, вы знаете , у вас есть улучшения , чтобы сделать в вашем коде.
Когда вы получаете одинаковые тесты в двух разных приборах из-за дублирования и избыточности, вы знаете, что в вашем коде необходимо внести улучшения.
Вот отличный доклад Майкла Фезерса, демонстрирующий очень тесную связь между тестируемостью и дизайном в коде (первоначально опубликованный displayName в комментариях). В докладе также рассматриваются некоторые распространенные жалобы и неправильные представления о хорошем дизайне и тестируемости в целом.