BDD - это "внешняя" методология, которая, как я понимаю, означает, что вы начинаете с того, что знаете. Вы пишете свои истории и сценарии, а затем реализуете самые внешние объекты домена, перемещая "внутрь" и "намеренно" обнаруживая соавторов, когда вы идете вниз по уровням услуг, уровням домена и т.д. Для того, кто еще не существует, вы издеваетесь над ним (или "подделываете" ), пока не сделаете это. (Я краду некоторые из этих терминов прямо из Дэн-Норт и Кент Бек).
Итак, как UI вписывается в это?
Заимствование из одного из записей записей в блоге, он переписывает это:
Given an unauthenticated user
When the user tries to navigate to the welcome page
Then they should be redirected to the login page
When the user enters a valid name in the Name field
And the user enters the corresponding password in the Password field
And the user presses the Login button
Then they should be directed to the welcome page
в это:
Given an unauthenticated user
When the user tries to access a restricted asset
Then they should be directed to a login page
When the user submits valid credentials
Then they should be redirected back to the restricted content
Он делает это, чтобы исключить язык из необязательных доменов, одним из которых является пользовательский интерфейс ( "поле имени", "поле пароля", "кнопка входа" ). Теперь пользовательский интерфейс может измениться, и история (точнее, намерение истории) не сломается.
Итак, когда я пишу реализацию для этой истории, я использую пользовательский интерфейс или нет? Лучше ли запускать браузер и выполнять "пользователь представляет действительные учетные данные" с помощью теста Selenium или напрямую подключиться к базовой реализации (например, службе проверки подлинности)? Кстати, я использую jBehave в качестве моей рамки BDD, но так же легко можно было бы использовать Cucumber, rSpec или несколько других.
Я стараюсь не тестировать пользовательский интерфейс в автоматическом режиме, и я осторожно отношусь к инструментам автоматизации графического интерфейса, таким как Selenium, потому что я считаю, что тесты (1) могут быть слишком хрупкими и (2) запускаться там, где стоимость исполнения наибольший. Поэтому моя склонность - вручную протестировать пользовательский интерфейс для эстетики и удобства использования и оставить бизнес-логику более легкими, более легко переносимыми слоями. (И, возможно, слои с меньшей вероятностью могут измениться.)
Но я открыт для обращения к этому. Итак, BDD для пользовательского интерфейса или нет?
PS. Я прочитал все сообщения, которые я смог найти по этой теме, и никто не затрагивает мой вопрос. Этот ближе, но я не говорю о разделении пользовательского интерфейса в отдельную историю; скорее, я говорю об игнорировании этого полностью для целей BDD.