Это все поведение.
Учитывая определенный контекст, когда событие происходит (в пределах определенной области), тогда должен произойти некоторый результат.
Область действия может быть целым приложением, частью системы или отдельным классом. Даже функция ведет себя таким образом, с вводом в качестве контекста и выводом в качестве результата (вы также можете использовать BDD для функционального языка!)
Я склонен использовать каркасы модулей (NUnit, JUnit, RSpec и т. Д.) На уровне класса или интеграции, потому что аудитория техническая. Иногда я документирую Данные / Когда / Затем в комментариях.
На уровне сценария я пытаюсь выяснить, кто на самом деле хочет помочь в чтении или написании сценариев. Даже заинтересованные стороны могут читать текст, содержащий несколько точек и скобок, поэтому главная причина наличия естественной языковой структуры, такой как MSpec или JBehave, заключается в том, хотят ли они сами писать сценарии или показывать их людям, которые действительно будут отталкиваться от точек и скобки.
После этого я смотрю, как фреймворк будет играть с системой сборки, и как мы дадим возможность читать или писать соответствующим образом заинтересованным сторонам.
Вот пример, который я написал , чтобы показать, что вы можете делать со сценариями, использующими простые DSL. Это просто написано в NUnit.
Вот пример в той же кодовой базе , показывающий «Дано, Когда, Тогда» в комментариях к примеру на уровне класса.
Я абстрагируюсь от шагов позади, затем помещаю экраны или страницы за ними, затем на экранах и страницах, которые я называю любой системой автоматизации, которую я использую - это может быть Selenium, Watir, WebRat, Microsoft UI Automation и т. Д.
Пример, который я привел, сам по себе является инструментом автоматизации, поэтому сценарии демонстрируют поведение инструмента автоматизации посредством демонстрации поведения поддельного графического интерфейса на случай, если это запутает. Надеюсь, это поможет в любом случае!