При написании функции BDD я должен поместить предыдущее взаимодействие с пользователем в данный шаг или шаг Когда? - PullRequest
5 голосов
/ 28 февраля 2012

Я пытаюсь написать требования для многоэтапного бизнес-процесса (с помощью мастера).У меня есть много сценариев, в которых взаимодействие пользователя с одним экраном изменится, если вам позволено выбирать параметры на другом экране.

Например (я скрыл реальный бизнес, но процесс и форма шагов почтиидентично):

Feature: Personal Diagnostic Search Filter
  In order to select a Technician who offers Personal Diagnostics,
    when I've asked for a Personal Diagnostic
  As a Business Customer
  I want to limit my search to Technicians who offer Personal Diagnostics

  Background:
    Given a Business named "Big Al's Auto Supply"
      And a Customer named "Bob Test" at the "Big Al's Auto Supply" Business
      And an Account named "bobtest@testbusiness.com" owned by "Bob Test"
      And the "bobtest@testbusiness.com" Account has the "Repair Order Creator"
        permission
      And you log in as "bobtest@testbusiness.com"
      And you start scheduling a new Repair Order

  Scenario: Enter the Select Technician page when Use PD is selected
    Given you select Use PD
    When you enter the Select Technician page
    Then the PD Filter should be visible
      And the PD Filter should be selected

  Scenario: Basic Search for Technicians when PD Filter is selected
    Given a Technician named "PD Technician"
      And the Technician named "PD Technician" supports PD
      And a Technician named "Non-PD Technician"
      And the Technician named "Non-PD Technician" does not support PD
      And you select Use PD
      And you enter the Select Technician page
      And you select the PD Filter
      And you select Basic Search
    When you search for Technicians with the name "Technician"
    Then your search results should contain "PD Technician"
      And your search results should not contain "Non-PD Technician"

Но на вики-огурец рекомендуется:

Избегать разговоров о взаимодействии с пользователем в Givens

Они продолжают делать исключение, хотя:

Войдите в систему пользователя (исключение из рекомендации без взаимодействия. То, что «произошло раньше», в порядке).

На этой странице также сказано, что:

Цель действия «Когда» состоит в описании ключевого действия, которое пользователь выполняет

Что входит в данное и что входит в когда, если у вас много взаимодействий с пользовательским интерфейсом?

В моем первом сценарии select Use PD требует взаимодействия с пользовательским интерфейсом, так как он является частью мастера длясоздание нового заказа на ремонт.Однако предварительным условием для отображения фильтра PD является предварительное условие, которое срабатывает, когда пользователь заходит на страницу «Выбор технического специалиста».

Первый сценарий может быть не таким уж плохим, но второй сценарий усугубляет проблему.Поиск запускается, когда вы нажимаете Поиск , но для перехода на эту страницу необходимо выполнить множество действий с пользовательским интерфейсом.Некоторые из этих взаимодействий также нельзя скрыть, так как Use PD должен быть выбран, чтобы фильтр поиска даже появлялся.Но эти взаимодействия пользовательского интерфейса не являются ключевым действием сценария.

1 Ответ

9 голосов
/ 01 марта 2012

Как правило, старайтесь как можно больше формулировать сценарий, как если бы вы разговаривали о нем, и исключить как можно больше ненужной информации.

Например, я бы хотел, чтобы выСценарии выше, чтобы прочитать что-то вроде:

Given our customer Bob Test is scheduling a repair order
And we have two technicians: "Fred Technician" and "George Nontechnician"
When Bob Test decides he wants a Personal Diagnostic
And he selects a technician
Then the search results should only contain "Fred Technician"

Затем сделайте все необходимое, чтобы эти шаги работали - будь то вход в систему или иным образом.Обратите внимание, что я не говорил о «страницах» и не предпринимал реальных шагов - они должны быть интуитивно понятны для пользователя.BDD не о тестировании.Речь идет о том, чтобы придумать примеры того, как люди собираются использовать систему, чтобы вы могли обсудить эти примеры, изучить их, найти исключения и различные сценарии и т. Д.

Проверка того, что фильтр видимне ценный.Пользователю все равно, что фильтр виден.Ему важно, чтобы он мог использовать фильтр для получения своих результатов, поэтому просто сделайте это.

В коде я обычно передаю объект "World" между своими шагами.Это может убрать с дороги много губбин.Я не использовал Gherkin много, но я предполагаю, что это обеспечивает аналогичную способность.Вы можете хранить там все пользовательские данные, какие технические специалисты вы создали, так что вы можете проверить, не приводит ли это «Джордж Нетехник» к результатам и т. Д.

Полезно использовать понятные имена для ролей.тоже, потому что тогда люди могут представить, как выглядят Фред и Джордж.

Избавьтесь от всего, что не будет иметь значения в сценарии и не поможет людям представить, что это происходит.Вы знаете, что у Боба есть разрешение планировать заказ, потому что это то, что он делает - просто добавьте необходимые вещи к этому шагу.

«Когда» - это поведение, которое вы хотите описать.В этом случае вас интересует возможность фильтрации персональной диагностики, поэтому все взаимодействия с пользователем, связанные с поведением, должны быть в «Когда», а все предыдущие взаимодействия - в «Гивенсе».Я считаю полезным попытаться придумать контекст, в котором результат будет другим - например, что произойдет, если нет доступных специалистов по ПД?Это говорит мне, в чем разница;мы настроим другой контекст , но выполним то же событие .Контекст идет в Данном, события идут в Когда.(Раньше это было намного проще до появления «Фона»).

В общем, если ваши глаза мерцают, когда вы смотрите на сценарий, вы делаете что-то не так.

Надеждаэто помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...