По моему мнению, тестирование должно проводиться с того момента, как вы закончите писать свой первый метод.
Методы тестирования по мере их написания помогают во многих вещах. С одной стороны, когда что-то идет не так, и ваша единственная подсказка в том, что он находится в определенном классе, если у этого класса есть бесчисленное множество методов и свойств, трудно понять, что пошло не так. Очевидно, нет, если у вас есть синтаксическая ошибка, но семантические ошибки становятся очень хитрыми, когда вы бросаете в борьбу миллион методов.
Гарантия того, что каждый отдельный метод работает, что является наиболее детализированным уровнем уверенности, говорит о стабильности всего класса. Если у вас есть конкретное определение того, что должен делать конкретный метод, модульное тестирование не только предотвращает семантические ошибки в крайнем случае, но и помогает заранее спланировать поток вашей программы, что может помочь вам избежать масштабного рефакторинга или, что еще хуже, , переписывая.
Для эффективного тестирования убедитесь, что вы разбили свой класс на как можно больше методов. Я знаю, что некоторые могут не согласиться с этим, но значительная часть логики, которая выполняет действия в контексте, далеком от остальной части функции, должна быть перемещена в их собственную функцию, чтобы ее можно было проверить независимо. Я не буду выполнять SQL-запросы в вашем модульном тесте. Вместо этого используйте фиктивные объекты для имитации базы данных. Тестирование базы данных не является модульным тестированием.
Это не только поможет вам обеспечить целостность вашего приложения, но также поможет вам в будущем, когда части класса необходимо будет реорганизовать. Нет смысла выискивать три строчки логики в функции из 100 строк. Если эти части логики находятся в их собственном методе, вы можете быть уверены, что ваш метод не дает сбоя из-за этой логики. Если бы этот монстр функции не работал, у вас было бы меньше подсказок относительно того, какая часть функции действительно вызывает ошибку.
Я знаю, что все это может показаться излишним, но моя точка зрения заключается в раннем тестировании, и тестирование часто не только помогает стабильности вашей программы, но и помогает написать чистый код и избежать головной боли при поиске мелких ошибок.