Не похоже, что вы делаете правду Разработка через тестирование , которая требует итеративного цикла написания теста для небольшого фрагмента функциональности, создания функциональности для его выполнения и рефакторинг для удаления любого дублирования, которое мог добавить тест / код. Похоже, что вы тестируете после факта («код всегда достаточно сильно меняется, чтобы небольшие модульные тесты просто отбрасывались»). Если тест является спецификацией функциональности (как в TDD), рефакторинг никогда не приведет к тому, что тест «не выживет».
Итак, предполагая, что вы на самом деле не работаете с TDD, вы боретесь с компромиссом между количеством тестового кода и количеством времени, затрачиваемым на разработку производственного кода. Я бы сказал, напишите достаточно тестового кода, чтобы вы знали, что ваш код делает то, что должен делать. Если вы можете сделать это с помощью более грубых тестов, это нормально, хотя, как уже говорили другие, это усложняет определение причин сбоя.
Тестирование не только для рефакторинга. Это знать, когда вы закончите. Это так, что вы можете добавить новую функциональность с уверенностью, что вы не сломаете старые. Так что после того, как вы давно ушли, кто-то другой может войти и понять ваш код, изменить его и быть уверенным, что он работает.
Я рекомендую вам следовать практике TDD, как описано в Кент Бек . Написание тестов по факту лучше, чем отсутствие тестов, но я считаю, что это гораздо менее продуктивная практика, чем TDD.