Сценарий миграции огурца в схему сценария - PullRequest
0 голосов
/ 31 марта 2020

Я хочу переместить многострочный сценарий в схему сценария, чтобы отдельные строки таблицы можно было тестировать как отдельные тесты. Вот упрощенный пример того, что я имею в виду:

Scenario: This scenario loops through the lines of the table performing an assert on each line
    When I do something and verify it
      | name         | parameter1 | parameter2   | parameter3 |
      | A and 1      | A          | 1            | true       |
      | B and 1      | B          | 1            | false      |
      | A and 2      | A          | 2            | false      |
      | B and 2      | B          | 2            | true       |

Определение шага выглядит следующим образом:

@When("I do something and verify it")
public void doSomethingAndVerifyIt(DataTable dataTable) {
    List<Map<String, String>> keyValues = dataTable.asMaps();
    for (Map<String, String> keyValue : keyValues) {
        assertSomething(keyValue.get("parameter1"), keyValue.get("parameter2"), keyValue.get("parameter3"));
    }
}

Это работает нормально, но если какая-либо из строк не проходит шаг утверждения , тогда тест останавливается в этой точке. Я хотел бы изменить это на использование схемы сценария вдоль этих линий, чтобы линии могли проходить или проваливаться независимо друг от друга:

Scenario Outline: This scenario loops through the lines of the table performing an assert on each line
    When I do something and verify it

Examples:
      | name         | parameter1 | parameter2  | parameter3 |
      | A and 1      | A          | 1           | true       |
      | B and 1      | B          | 1           | false      |
      | A and 2      | A          | 2           | false      |
      | B and 2      | B          | 2           | true       |

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

Есть ли более простой способ сделать это вдоль этих линий:

@When("I do something and verify it")
public void doSomethingAndVerifyIt(Map<String, String> keyValue) {
    assertSomething(keyValue.get("parameter1"), keyValue.get("parameter2"), keyValue.get("parameter3"));
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

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

Scenario Outline: eating
  Given there are <start> cucumbers
  When I eat <eat> cucumbers
  Then I should have <left> cucumbers

  Examples:
    | start | eat | left |
    |    12 |   5 |    7 |
    |    20 |   5 |   15 |




0 голосов
/ 31 марта 2020

Смотрите мой другой ответ о том, как использовать таблицу.

Лучший способ улучшить ваш сценарий - преобразовать ваши примеры в именованные правила. Примеры очень полезны при сборе информации из бизнеса при обсуждении поведения. Однако они не очень хороши, когда дело доходит до написания кода. Давайте немного разберемся с паролем.

Скажем, у нас

password     | success?

123456       |   no
xb32drthcyfe |   no
p@ssword1    |   yes

в качестве наших примеров. Проблема, которую мы имеем здесь, заключается в том, что мы не знаем, ПОЧЕМУ xb32drthcyfe должен потерпеть неудачу, а p@ssword1 должен быть успешным. Мы можем догадаться, но наш сценарий не смог записать ПОЧЕМУ.

Теперь рассмотрим

Scenario: Passwords must contain a symbol
 When I register with a password without a symbol
 Then I should see my password needs a symbol

Теперь у вас есть один сценарий, который не только документирует ПОЧЕМУ, но и позволяет бросить вызов ПОЧЕМУ и изучите ПОЧЕМУ, например:

Scenario: Weak password that contains a symbol
 Given my password is long enough has a symbol but it is really weak
 When I register with my password
 Then I should be registered.

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

Каждый пример должен иметь уникальное имя Править за этим. Чтобы пример стал достаточно зрелым, чтобы жить в ваших хитах, вы должны раскрыть это правило, дать ему имя и затем заменить использование примера в ваших хитах на сценарий ios, исследующий правило.

...