Смешивание тогда и когда в пользовательских историях 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, а не английский, но вы должны понять):

http://code.google.com/p/wipflash/source/browse/Example.PetShop.Scenarios/PetRegistrationAndPurchase.cs

Вопрос действительно в том, что такое "ветви".

Если существует несколько шагов, на каждом шаге должен быть выбор пользователя. Должно быть несколько "когда". Это должно сформировать богатое дерево с множеством выбранных пользователем альтернатив в каждой ветви. Каждый возможный результат должен иметь свой собственный тест, чтобы сделать различные выборы и прийти к этому результату.

Трехступенчатая последовательность с двумя вариантами выбора пользователя - это 8 возможных путей. Разные пути могут прийти к одному и тому же результату (или нет). Но у вас должно быть несколько путей через это.

Если он просто последовательный (потому что кому-то хотелось писать последовательные шаги) и у пользователя нет выбора, то на самом деле это не зависит от поведения пользователя, не так ли?

Я не вижу вариантов. Нет выбора == плохой запах. Но это легко проверить, поскольку есть только один результат с последовательностью последовательных шагов, когда у пользователя мало или нет выбора.

Если вы правильно отработали свой выбор, то каждый шаг имеет несколько результатов, и каждый шаг должен быть протестирован независимо.

Другие вопросы по тегам