Несколько сценариев в файле характеристик спецификации?
После того, как я стал более удобным в разработке, управляемой поведением, используя SpecFlow, мне стало интересно иметь несколько сценариев для одной и той же функции следующим образом:
Register.feature
Feature: Register a new user
In order to use the system,
one must register with the system
so that one gets authorized and may login
Scenario: Register a new user using valid credentials
Given I am on the registration page
When I have entered my desired username "UserName" and password "password"
And I have confirmed my password "password"
And I click the register button
Then I shall get confirmation that I am now a registered user
Помимо того, что мой сценарий, возможно, стал слишком толстым, необходимо также проверить другие сценарии в процессе регистрации, такие как:
- Введенное имя пользователя слишком короткое
- Входной пароль слишком короткий
- Входной пароль не содержит цифр
- Входной пароль не совпадает с подтвержденным паролем
Просто назвать несколько. Я прочитал о тегах, используя SpecFlow Feature File, чтобы я мог сделать следующее:
@shorterPasswordProvided
Scenario: Register a user using a password that is too short
Given I am on the registration page
When I have entered my desired user name
And I have provided a password that is too short "allo"
And I click the Register button
Then I shall get an error message which mentions about the password minimum length
@noCredentialsAtAll
Scenario: Register a user using no credentials at all
Given I am on the registration page
When I click on the Register button with no credentials entered
Then I shall get an error message that says I have to fill all required fields in
Затем, используя [BeforeScenario("myTag")]
должен сделать свое дело.
Хуки позволяют выполнять подмножество тестов, следуя определенным правилам. Итак, When
Затем метод может быть выполнен с предопределенным контекстом, то есть с хуком, для которого он должен был быть выполнен, и это упоминается через BeforeScenario
или подобный атрибут.
Правильно ли я понял или я в тумане?
Я слишком далеко?
Я что-то пропустил?
Все ли "слишком короткие пароли", "никакие учетные данные не предоставлены" считаются различными сценариями использования, или они представляют собой что-то еще, что может вписаться где-то еще в коде, например сами модульные тесты?
Я имею в виду, что все эти сценарии принадлежат функции Register, и поэтому они должны быть определены в одном и том же файле Feature.Feature SpecFlow Feature, верно?
1 ответ
Хорошо, у вас есть пара вопросов, поэтому я разберусь с ними:
Затем с помощью [BeforeScenario("myTag")] следует добиться цели.
Атрибут ловушки BeforeScenario используется для запуска некоторого кода перед выполнением сценария. Он часто используется для настройки среды для сценария (например, заполнение тестовой базы данных соответствующими данными); если используется для этой цели, то использование AfterScenario может также использоваться для очистки результата BeforeScenario.
Хуки позволяют выполнять подмножество тестов, следуя определенным правилам. Таким образом, метод When может быть выполнен с предопределенным контекстом.
Если я вас правильно понимаю, вы хотите иметь возможность использовать тег для управления, когда шаг в сценарии может быть запущен / не запущен. Это невозможно с помощью атрибутов хука SpecFlow; есть ловушка BeforeStep, но она позволяет вам выполнить код только до запуска шага, но не позволяет игнорировать этот шаг.
Все ли "слишком короткие пароли", "никакие учетные данные не предоставлены" считаются различными сценариями использования, или они представляют собой что-то еще, что может вписаться где-то еще в коде, например сами модульные тесты?
В вашем примере, да, это разные сценарии для функции "Зарегистрировать нового пользователя". Если вы придерживаетесь строгого подхода BDD к своей разработке, то с вашим подходом к разработке "снаружи внутрь" вы также будете реализовывать модульные тесты (возвращаясь к TDD как части процесса BDD), который также будет охватывать " проверка слишком короткого пароля "и" учетные данные не предоставлены ".
Что касается вашего сценария:
When I have entered my desired username "UserName" and password "password"
Вместо этого используйте:
When I enter my username "UserName"
And I enter my password "password"
Сделав это, вы сможете повторно использовать "Когда я ввожу свой пароль" в "Регистрация пользователя с использованием слишком короткого пароля". Это приводит меня к:
And I have provided a password that is too short "allo"
Нет необходимости в отдельном шаге, в котором говорится, что пароль слишком короткий. Просто повторно используйте:
When I enter my password "allo"
По той же причине не используйте:
When I click on the Register button with no credentials entered
просто используйте повторно:
When I click on the Register button