BDD добавляет цикл вокруг цикла TDD.
Итак, вы начинаете с поведения и позволяете этому управлять вашими тестами, а затем позволяете тестам управлять разработкой. В идеале BDD управляется каким-то приемочным тестом, но это не обязательно на 100%. Пока вы определили ожидаемое поведение, вы в порядке.
Итак, допустим, что вы пишете страницу входа.
Начните с счастливого пути:
Given that I am on the login page
When I enter valid details
Then I should be logged into the site
And shown my default page
Этот синтаксис «дано, и когда, и тогда, и» является обычным в поведенческой разработке. Одним из преимуществ этого является то, что он может быть прочитан (и, с обучением, написан) не разработчиками - то есть, ваши заинтересованные стороны могут просматривать список поведений, которые вы определили для успешного завершения задачи, и посмотреть, если это соответствует их ожиданиям задолго до того, как вы выпустите неполный продукт.
Существует язык сценариев, известный как Gherkin, который очень похож на приведенный выше и позволяет вам писать тестовый код за предложениями в этих режимах. Вам следует искать переводчика на основе Gherkin для вашей обычной среды разработки. Это выходит за рамки этого ответа.
Во всяком случае, вернемся к поведению. Ваше текущее приложение еще не делает этого (если оно делает то, почему кто-то запрашивает изменение?), Поэтому вы проваливаете этот тест, используете ли вы тестовый прогон или просто тестируете вручную.
Теперь пришло время переключиться на цикл TDD, чтобы обеспечить эту функциональность.
Пишете ли вы BDD или нет, ваши тесты должны иметь общий синтаксис. Одним из наиболее распространенных является синтаксис «следует», который вы описали.
Написать тест: ShouldAcceptValidDetails. Пройдите цикл Red-Green-Refactor, пока не будете довольны им. Пройдем ли мы сейчас тест на поведение? Если нет, напишите еще один тест: ShouldRedirectToUserDefaultPage. Red-Green-Refactor, пока ты счастлив. Стирайте, ополаскивайте, повторяйте, пока не выполните критерии, изложенные в поведении.
И затем мы переходим к следующему поведению.
Given that I am on the login page
When I enter an incorrect password
Then I should be returned to the login page
And shown the error "Incorrect Password"
Теперь вы не должны были выгружать это, чтобы передать свое прежнее поведение. Вы должны провалить этот тест на данный момент. Так что возвращайтесь к своему циклу TDD.
И так до тех пор, пока у вас не будет вашей страницы.
Настоятельно рекомендуем книгу Rspec для получения дополнительной информации о BDD и TDD, даже если вы не являетесь разработчиком Ruby.