Если вы не собираетесь писать код без его тестирования, вы всегда будете нести расходы на тестирование.
Разница между наличием модульных тестов и их отсутствием заключается в разнице между стоимостью написания теста и стоимостью его проведения по сравнению со стоимостью тестирования вручную.
Если стоимость написания модульного теста составляет 2 минуты, а стоимость выполнения модульного теста - практически 0, а стоимость ручного тестирования кода - 1 минута, то вы безубыточны, даже если вы дважды выполнили тест.
В течение многих лет я был в заблуждении, что у меня не было достаточно времени для написания модульных тестов для моего кода. Когда я писал тесты, они были раздутыми, тяжелыми вещами, которые только побуждали меня думать, что я должен когда-либо писать модульные тесты только тогда, когда я знал, что они нужны.
Недавно мне предложили использовать Test Driven Development, и я обнаружил, что это полное откровение. Теперь я твердо убежден, что у меня нет времени не писать юнит-тесты .
По моему опыту, разрабатывая с учетом тестирования, вы получаете более чистые интерфейсы, более сфокусированные классы и модули и, как правило, более твердый , тестируемый код.
Каждый раз, когда я работаю с унаследованным кодом, в котором нет модульных тестов, и мне приходится что-то тестировать вручную, я продолжаю думать, что «это было бы намного быстрее, если бы в этом коде уже были модульные тесты». Каждый раз, когда мне приходится пытаться добавить функциональность модульного теста в код с высокой связью, я продолжаю думать, что «это было бы намного проще, если бы оно было написано в разобщенном виде».
TL; версия DR :
Напишите тест, когда стоимость написания теста плюс стоимость его проведения столько раз, сколько вам нужно, вероятно, будет меньше, чем стоимость его ручного тестирования столько раз, сколько вам нужно.
Помните, однако, что если вы используете TDD, стоимость написания тестов, вероятно, снизится по мере того, как вы справитесь с этим, и, если код не является абсолютно тривиальным, вы, вероятно, будете выполнять свои тесты чаще, чем ожидаете.