Тесты - это просто ∞
Когда я рассказывал lightning talk про тестирование, я отмечал свою статистику -- размеры тестов всегда больше размера тестируемого кода. Из этого можно сделать неправильный вывод, что на написание оттестированного кода уходит в два раза больше времени, чем на код без тестов. При обсуждении я говорил, что тесты как правило проще чем тестируемый код, и время колеблется где-то в районе +50%. Так вот, это пессимистичная оценка. Некоторое время я специально понаблюдал за собой и процессом написания и тестирования. И результат очень простой: базовые тесты пишутся в процессе отладки кода, а не отдельно. И при достаточном опыте написания тестируемого кода и тестов, время написания кода+тестов такого-же порядка, как написание отлаженного кода.
Для себя я выработал такой подход:
- Пишем test-aware код
- При создании кода сразу покрываем тестами те юниты, которые тестируется легко (нет возни с mock'ами, файлами, фикстурами и пр.)
- Покрываем ключевые юниты тестами (если они еще не покрыты после п.2)
- При появлении бага перед исправлением пишем тест, который падает при наличии ошибки и проходит после исправления. Исправляем, прогоняем тест, коммитим.
Не освещена тема функционального тестирования, так что stay tuned ;)
