Не подумайте плохого - мне идея BDD (
Behavior Driven Development) очень нравится. В этом случае смешивается анализ, программирование, тестирование; разработчик разбирается в проблеме, одновременно пишет код, тесты, создаёт документацию. Отмечу, что под разработчиком я подразумеваю не только программиста, но вообще любого, кто связан с этим процессом (аналитика, дизайнера, программиста, тестировщика).
Однако, что-то в последователи BDD упускают. Я не говорю про те проблемы, которые BDD имеет: уверен, что если кому-то нравится так работать, и что если процесс экономически выгоден, то со счетов его сбрасывать нельзя ни в коей мере. Но вспомним требования к тестам, которые давно уже стали
мантрой:
- Быстрота (Fast). Тесты должны выполняться быстро.
- Независимость (Independent). Результаты выполнения одного теста не должны быть входными данными для другого.
- Повторяемость (Repeatable). Тесты должны давать одинаковые результаты не зависимо от среды выполнения.
- Очевидность (Self-Validating). Результатом выполнения теста должно быть булево значение.
- Своевременность (Timely). Тесты должны создаваться своевременно.
Очень правильные требования. А теперь рассмотрим, как jbehave / cucumber рассматривают сценарии: каждый шаг сценария определяется как маленький тест. В этом случае нарушаются 2 и 4 требования к тестам, потому что:
- каждый последующий шаг может зависеть от предыдущего (исключение - шаги, связанные конструкцией And);
- в большинстве случаев только последний шаг (Then) делает проверку условия.
... может, это неправильно - рассматривать каждый шаг как тест?! Или примеры BDD неправильно показывают методологию?!