Я программирую в течение 20 лет, и я практически никогда не писал ни строчки кода, на котором бы я не запускал какой-нибудь модульный тест. Честно говоря, я знаю, что люди делают это все время, но как кто-то Я могу отправить строку кода, на которой не было какого-либо тестового запуска, и я не могу это сделать.
Часто, если нет тестовой среды, я просто пишу main () в каждый класс, который я пишу. Это добавляет немного в вашу программу, но кто-то всегда может удалить его (или закомментировать), если он захочет. Мне бы очень хотелось, чтобы в вашем классе был только метод test (), который автоматически компилировался бы для сборок релиза - мне нравится, что мой метод test находится в том же файле, что и мой код ...
Итак, я выполнил тестовую разработку и тестированную разработку. Я могу сказать вам, что TDD действительно может помочь, когда вы начинающий программист. Это поможет вам научиться просматривать код «извне», что является одним из самых важных уроков, которые может усвоить программист.
TDD также поможет вам начать работу, когда вы застряли. Вы можете просто написать небольшую часть, которую, как вы знаете, должен делать ваш код, затем запустить ее и исправить - она вызывает привыкание.
С другой стороны, когда вы добавляете к существующему коду и точно знаете, что именно вы хотите, это путаница. Ваш «Другой код» часто проверяет ваш новый код на месте. Вы по-прежнему должны быть уверены, что тестируете каждый путь, но вы получаете хорошее покрытие, просто запуская тесты из внешнего интерфейса (за исключением динамических языков - для тех, кому действительно нужно иметь модульные тесты для всего, независимо от того, что).
Кстати, когда я работал над довольно крупным проектом Ruby / Rails, у нас был очень высокий процент охвата тестированием. Мы реорганизовали основной, центральный модельный класс на два класса. Это заняло бы у нас два дня, но со всеми тестами, которые нам пришлось провести рефакторинг, все закончилось ближе к двум неделям. Тесты не являются полностью бесплатными.