А посоветуйте, что почитать по написанию тестов? Чет у меня мозги в это сторону пока плохо работают.
Не, я понимаю, что все водится к достаточно простой схеме: Взять тестируемый код и впихнуть в него данные, которые должны к нему попасть.
Но когда пытаюсь это делать в реальном проекте - вообще сообразить не могу, что делать. То ли архитектура дурацкая, то ли лыжи не едут.
Если изначально код не писали по схеме юниттесты->основной код, то и скорее всего архитектура будет не приспособлена под юниттестирование со всеми вытекающими (никто не ждет тестовых данных на вход и т.п.). Обычно в такой архитектуре еще нарушенными бывают и принципы SOLID. Сначала нужно писать тесты, потом к ним код, который будет выполнять все тесты на 100%.
Например (привожу пример из своей работы, код не везде такой, просто проект очень большой, очень много легаси кода старого), очень часто нарушается принцип единственной ответственности, что однозначно будет мешать написать юниттесты правильно и красиво. Допустим, есть желание написать юниттест к уже существующему коду.
Открываешь функцию, а в ней черт ногу сломит - овер 1000 строк кода, делаются запросы к пользователю (привет и пока юниттест), делаются запросы в базу данных(какие-то там настроечные параметры, ищутся другие связанные сущности, расположенные также в базе ), состояние базы на момент запуска юниттеста может быть любое, данные по итогу сохраняются напрямую в базу в самом конце (это хорошо если в самом конце, а могут и по ходу этой простыни из 1000+ строк текста местах так в 10-30). За 15 лет существования этой функции в него допиливали какие-то костыли и грабли, которые размывают вообще общую картину что она делала изначально, когда ее только написали маленькой, и что сейчас.
И думаешь - ну и как этот бред протестировать юниттестами - вывод приходит один - никак. Или сидеть и изменять/рефакторить. А в большом проекте более менее важные куски особо не по изменяешь - меняешь строчку в одном месте - вылезает в совершенно другом))))
Очень хорошая книга по программированию Роберт Мартин "Чистый код. Создание, анализ и рефакторинг". Книга затрагивает многие аспекты разработки программного обеспечения. TDD в книге посвещена отдельная глава.