Я новичок в BDD, но я нашел это очень интересным и хочу разработать свой следующий проект, используя BDD. После поиска в Интернете и просмотра скринкастов у меня все еще много вопросов о BDD в реальной жизни.
1. Декларативные или императивные сценарии?
Большинство сценариев, которые я видел, когда-то были написаны с точки зрения UI (императив).
Scenario: Login
Given I am on the Login-page
When I enter 'AUser' in the textbox 'UserName'
And I enter 'APassword' in the textbox 'Password'
And I click the 'Login' button
Then I should see the following text 'You are logged in'
Я обнаружил, что эти тесты чрезвычайно хрупкие, и они ничего не говорят о ценности бизнеса при нажатии на кнопки. Я думаю, что его кошмар для поддержания. Почему большинство примеров используют настоящие сценарии?
Scenario: Login (declarative)
Given I am not logged in
When I log in using valid credentials
Then I should be logged in
Если вы предпочитаете декларативный стиль, как вы описываете такие вещи, как "Домашняя страница" или "Страница продуктов"?
2. Управлять пользовательским интерфейсом или нет?
В большинстве этапов реализации я использовал WatiN, White или что-то подобное для реализации сценариев с пользовательской точки зрения. Запуск браузера, нажатие кнопок. Я считаю его чрезвычайно медленным и хрупким. Ну, я могу использовать что-то вроде объекта страницы, чтобы сделать тесты менее хрупкими. Но это еще одна работа. Особенно для настольных приложений со сложным интерфейсом.
Как вы реализуете сценарии в реальных проектах - реализуете пользовательский интерфейс или через контрольные контроллеры/презентаторы?
3. Реальная база данных или нет?
Когда данная часть сценария реализована, часто требуется, чтобы некоторые данные находились в системе (например, некоторые продукты для приложения магазина). Как вы реализуете эту часть - добавление данных в настоящую базу данных (полное сквозное тестирование) или предоставление контуров репозитория для контроллеров?
Ожидание опытных ответов!
UPDATE: добавлены полезные ссылки по вопросам.