BDD - это набор шаблонов, описывающих и создающих модели поведения системы (и, на более высоком уровне, видение проекта), которые могут помочь нам вести беседы об этом поведении для различных уровней детализации.
Мы используем диалоговые шаблоны, такие как «Учитывая контекст, когда происходит это событие, тогда этот результат должен происходить», и поощряем такие вопросы, как «Должно ли это быть? Всегда? Есть ли какие-либо другие контексты, которые мы пропускаем?»
Мы можем сделать это на уровне объекта, на уровне сценария или даже в пространстве анализа.
Я стремлюсь работать с самого высокого уровня внутрь. Вот статья, которую я написал , в которой описывается, как это выглядит, прямо от видения проекта до модульных тестов.
Первым фрагментом кода, который я напишу, будут сценарии. Вот некоторые сценарии , написанные без каких-либо платформ BDD, просто старый NUnit, показывающий, как можно сделать их читаемыми на английском языке с помощью языка домена и т. Д.
Затем я начну с пользовательского интерфейса.Это может быть графический интерфейс, веб-страница или интерфейс другой системы для использования моей системы.Когда это будет сделано, я смогу узнать, нравится ли это моим пользователям.Я часто кодирую данные и т. Д., Просто чтобы получить эту обратную связь.
Когда я примерно знаю, как будет выглядеть мой графический интерфейс, я могу начать создавать поведение, стоящее за ним.Я обычно начинаю с поведения контроллера.Я напишу примеры на уровне класса, которые описывают поведение и обязанности класса.Я использую издевательства вместо сотрудничающих классов, которые я еще не написал.Это эквивалент TDD, но вместо того, чтобы писать тесты, которые закрепляют код так, чтобы никто не сломал его, я пишу примеры того, как вы можете использовать мой код, которые показывают, как он ведет себя и почему он ценен, чтобы вы могли изменитьэто безопасно.Я также использую Given / When / Then для этого!Но я склонен использовать более технический язык и не беспокоиться о том, что он читается на английском.Часто мои данные / когда / только в комментариях. Вот пример поведения класса из той же кодовой базы, что и сценарии, так что вы можете увидеть, в чем разница.
Надеюсь, это поможет, и удачи с BDD!