Смешивание тогда и когда в пользовательских историях BDD / Приемочные тесты
Как вы справляетесь с пользовательскими историями / приемочными тестами, которые имеют длинные цепочки, подобные этой, где Тогда / Когда смешиваются вместе? Лучше ли разделить это на отдельный приемочный тест, где один тестирует, что появляется диалоговое окно, а затем второй тестирует поведение после того, как диалог был показан?
Feature: Confirmation before removing products from cart
In order to avoid accidentally removing an item from my cart
As a Customer
I want a confirmation dialog to ask me if I'm sure I want to remove an item
Scenario: I want to remove an item from my cart
Given I have added item "xyz" to my cart
When I click "Remove"
Then a confirmation dialog pops up
And it asks "Are you sure you want to remove this from your cart"
When I click "Yes"
Then item "xyz" should be removed from my cart
2 ответа
Ваш сценарий кажется немного длинным, и он довольно сильно привязан к графическому интерфейсу. Что бы произошло, если бы вы связали это с возможностями системы?
Scenario: I want to remove an item from my cart
Given I have a cart containing "xyz"
When I remove "xyz" from my cart
Then my cart should be empty.
Сценарий теперь описывает вещи, которые полезны для пользователя, и их проще реорганизовать.
Я люблю BDD так же сильно, как и я, потому что у меня была такая ситуация. У нас было 120 приемо-сдаточных испытаний, и они в основном провалились Кто-то поместил диалоговое окно подтверждения во многом похожее на то, что вы описали, и сразу же преодолел более 80 приемочных тестов. Превратив их в сценарии с высокоуровневыми, многократно используемыми шагами, мы можем легко реорганизовать и поддерживать тесты, даже если механизмы, которые мы используем для реализации возможностей системы, изменятся. Фактическое нажатие кнопок происходит в течение этих многократно используемых шагов, и вполне нормально иметь более одного действия пользовательского интерфейса на шаг.
Я написал здесь сценарий, который делает это, если это полезно (это DSL, а не английский, но вы должны понять):
Вопрос действительно в том, что такое "ветви".
Если существует несколько шагов, на каждом шаге должен быть выбор пользователя. Должно быть несколько "когда". Это должно сформировать богатое дерево с множеством выбранных пользователем альтернатив в каждой ветви. Каждый возможный результат должен иметь свой собственный тест, чтобы сделать различные выборы и прийти к этому результату.
Трехступенчатая последовательность с двумя вариантами выбора пользователя - это 8 возможных путей. Разные пути могут прийти к одному и тому же результату (или нет). Но у вас должно быть несколько путей через это.
Если он просто последовательный (потому что кому-то хотелось писать последовательные шаги) и у пользователя нет выбора, то на самом деле это не зависит от поведения пользователя, не так ли?
Я не вижу вариантов. Нет выбора == плохой запах. Но это легко проверить, поскольку есть только один результат с последовательностью последовательных шагов, когда у пользователя мало или нет выбора.
Если вы правильно отработали свой выбор, то каждый шаг имеет несколько результатов, и каждый шаг должен быть протестирован независимо.