Test Driven Development (TDD)- она же "разработка через тестирование" - это методология разработки, согласно которой при написании кода сначала пишешь проваливающийся авто-тест, потом только код, и делаешь код до тех пор, пока авто-тест не заработает.
1. красный = написание проваливающегося авто-теста
2. зелёный = написание кода, чтоб тест не проваливался
3. рефакторинг = устранение дублирования и оптимизация кода
Мне такая задумка нравится, потому что:
+ TDD в некоторой степени гарантирует работоспособность программы
+ интереснее, чем мануально протыкивать swagger
+ меньше времени в будущем на манульное тестирование
+ если не доделал функционал - тест напомнит тебе его доделать
+ не нужно перепроверять работу за другими разработчиками, фронтендерам ненужно ждать фиксы первичных багов
- больше времени тратить на написание кода
- если писать тесты плохо, они только сделают всё хуже
Я предлагаю такие правила TDD:
- тесты делать минималистичными и простыми
- тестировать только корректный вывод результата (не тестировать пограничные случаи ошибки)
- не писать тесты, которые не могут провалиться, и не писать тесты для состояний, которые не могут произойти
- писать тесты только для главной тестируемой функции (если говорить на языке веба, писать тесты только для endpoint-ов, или же вьюх). для этого нам понадобится DI (dependency injection)
Этим мы добьёмся следующего:
- минимум времени на бесполезные тесты
- находим баланс между тратой времени на написание тестов, их пользой, и количеством покрываемого функционала
- не нарушаем архитектуру приложения, не импортируем в файл с тестами непубличные функции