Роберт Мартин в своей книге "Чистый Код" описал 5 простых принципов которым должны соответствовать юнит тесты. Вкратце принципы звучат так:
Fast - тесты должны быть невероятно быстрыми, чтобы их хотелось запускать как можно чаще
Independent - тесты не должны зависеть от результатов выполнения других тестов
Repeatable - тесты должны всегда выдавать одинаковый результат в любом окружении
Self-Validating - результат выполнения тестов бинарен и полностью автоматизирован. Разработчик должен видеть явный ответ тесты прошли или нет.
Timely - тест должен быть написан вовремя, то есть прямо перед кодом который позволит тесту пройти успешно.
В последнем пункте дядюшка Боб прямо говорит: Если писать тест после кода то:
- можно обнаружить что написанный код тяжело тестировать
- можно решить что написанный код тяжело тестировать
- можно писать код который будет не тестируемым
Несоблюдение этих принципов чревато получения от тестов результатов прямо противоположных ожидаемым. Вместо стабильного кода - набор костылей, вместо ускорения разработки - трата времени на борьбу с тестами, вместо прокачки навыков - увязание в собственном коде и невозможность дать четких сроков выполнения даже для простых задач.
Эти пять принципов необходимо знать наизусть и всегда использовать. Первые четыре очень просты, хотя придется постараться чтобы сделать тесты действительно быстрыми (все тесты должны выполняться меньше, чем за секунду). Что касается пятого принципа - писать тесты до кода - это тот самый Test Driven Development, для освоения которого обычно требуется несколько месяцев.