BDD - это «вне дома» методология, которая, как я понимаю, означает, что вы начинаете с того, что знаете. Вы пишете свои истории и сценарии, а затем реализуете самые внешние объекты домена, перемещая «внутрь» и «намеренно» обнаруживая соавторов, когда вы идете вниз по уровням услуг, уровням домена и т. Д. Для того, кто еще не существует, вы издеваетесь над ним (или «подделываете»), пока не сделаете это. (Я краду некоторые из этих терминов прямо от Дэн Норт и Кент Бек).Действительно ли BDD применим на уровне пользовательского интерфейса?
Итак, как пользовательский интерфейс вписывается в это?
Заимствование одного из Норта blog entries, он переписывает это:
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
Он делает это, чтобы исключить язык из несоответствующих областей, одна из которых является UI («Поле имени», «Поле пароля», «Кнопка входа»). Теперь пользовательский интерфейс может измениться, и история (точнее, история намерения) не сломается.
Итак, когда я пишу реализацию этой истории, я использую пользовательский интерфейс или нет? Лучше ли запускать браузер и выполнять «пользователь представляет действительные учетные данные» с помощью теста Selenium или напрямую подключиться к базовой реализации (например, службе проверки подлинности)? Кстати, я использую jBehave как свою базовую структуру BDD, но так же легко мог быть огурцом, rSpec или рядом других.
Я стараюсь не тестировать пользовательский интерфейс в автоматическом режиме, и я осторожно отношусь к инструментам автоматизации графического интерфейса, таким как Selenium, потому что я считаю, что тесты (1) могут быть слишком хрупкими и (2) запускаться там, где стоимость исполнения величайший. Поэтому моя склонность - вручную протестировать пользовательский интерфейс для эстетики и удобства использования и оставить бизнес-логику более легкими, более легко переносимыми слоями. (И, возможно, слои с меньшей вероятностью могут измениться.)
Но я открыт для преобразования на этом. Итак, BDD для пользовательского интерфейса или нет?
PS. Я прочитал все сообщения, которые я смог найти по этой теме, и никто не затрагивает мой вопрос. This one подходит ближе, но я не говорю о разделении интерфейса в отдельную историю; скорее, я говорю об игнорировании этого полностью для целей BDD.
Спасибо за ответ, Лиз. Я также ссылался на ваш блог и видео. На меня не потеряно, что BDD - это общение больше, чем что-либо еще, что, я думаю, подчеркивает мою сдержанность, чтобы включить графический интерфейс. В любом случае, мои заинтересованные стороны вообще не рассказывают истории с точки зрения графического интерфейса. –
«Дядя» Боб Мартин [твиттер] (https://twitter.com/unclebobmartin/status/207282123835588608) по этой теме дважды в выходные дни, добавляя топливо в огонь: «Тесты - это код! Как и весь код, они должны быть разработанные! Не связывайте свои тесты с пользовательским интерфейсом! " –
Только одна ссылка HTML за комментарий разрешена, по-видимому. [Здесь] (https://twitter.com/unclebobmartin/status/207281655130488832) вторая ссылка: «Люди, делающие BDD _ через пользовательский интерфейс, вообще не делают BDD. Они делают MDD: Mess Driven Development». –