Смешивание тогда и когда в пользовательских историях BDD / Приемочные тесты - PullRequest
2 голосов
/ 19 августа 2010

Как вы справляетесь с пользовательскими историями / приемочными тестами, которые имеют длинные цепочки, подобные этой, где Тогда / Когда смешиваются вместе?Лучше ли разделить это на отдельный приемочный тест, где один тестирует, что появляется диалоговое окно, а затем второй тестирует поведение после того, как диалог был показан?

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 ]

2 голосов
/ 19 августа 2010

Ваш сценарий кажется немного длинным, и он довольно сильно привязан к графическому интерфейсу.Что бы произошло, если бы вы вместо этого привязали его к возможностям системы?

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.

Сценарий теперь описывает вещи, которые полезны для пользователя, и их проще реорганизовать.столько, сколько я делаю, потому что у меня была такая ситуация.У нас было 120 приемо-сдаточных испытаний, и они в основном проваливались.Кто-то поместил диалоговое окно подтверждения во многом похожее на то, что вы описали, и сразу же преодолел более 80 приемочных тестов.Превратив их в сценарии с высокоуровневыми, многократно используемыми шагами, мы можем легко выполнить рефакторинг и поддерживать работу тестов, даже если механизмы, которые мы используем для реализации возможностей системы, изменятся.Фактическое нажатие кнопок происходит в течение этих повторяемых шагов, и вполне нормально иметь более одного действия пользовательского интерфейса на шаг.

Я написал здесь сценарий, который делает это, если это полезно (это скорее DSL, чем английский, но выдолжен понять):

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

1 голос
/ 19 августа 2010

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

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

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

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

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

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

...