Корнишон "ИЛИ" синтаксис, чтобы уменьшить повторение с BDD - PullRequest
5 голосов
/ 01 февраля 2012

Кто-нибудь знает способ достижения этого или они думают, что это хорошая идея. Иметь синтаксис в стиле OR в Gherkin для уменьшения количества повторений, но для удобства чтения человеком (надеюсь). Я имею в виду случаи, когда комбинации предложений расширяются с каждой комбинацией нескольких операторов OR. например,

Scenario: TestCopy
  Given Some text is selected
  When The user presses Ctrl + C
    OR the user right clicks and selects copy
    OR the user selects Edit + Copy
  Then the text is copied to the clipboard

Это будет запускаться как 3 теста, каждый с одинаковым заданным значением, а затем с одним «Когда» из установленного ИЛИ. Я полагаю, что это могло быть достигнуто с помощью шаблона с заполнителем для предложения When, но я думаю, что это более читабельно и может позволить использовать OR в заданном случае, чтобы создать n x m тестов. С контуром вам все равно понадобится n x m строк.

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

Спасибо.

Ответы [ 4 ]

12 голосов
/ 01 февраля 2012

Вы можете сгенерировать несколько тестов из одного сценария с помощью Контуры сценария:

Scenario Outline: TestCopy
  Given Some text is selected
  When <Copy operation executed>
  Then the text is copied to the clipboard

Examples: 
    | Copy operation executed                |
    | The user presses Ctrl + C              |
    | the user right clicks and selects copy |
    | the user selects Edit + Copy           |

В Scenario Outline вы в основном создаете шаблон, который заполняется предоставленным Examples.
Для приведенного выше примера Specflow сгенерирует 3 теста с одинаковыми Given и Then и с 3 разными When s:

When The user presses Ctrl + C
When the user right clicks and selects copy
When the user selects Edit + Copy
9 голосов
/ 01 февраля 2012

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

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

Scenario: TestCopy
  Given some text is selected
  When the user copies the selected text
  Then the selected text is copied to the clipboard

И различные способы копирования текста перейдут к определению 3-го шага.

4 голосов
/ 01 февраля 2012

Что касается сценария nxm , я чувствую, что когда вы хотите это сделать, вы, вероятно, ошибаетесь.

Вы не привели явный пример, ноПредположим, вы хотите что-то вроде:

Given A block of text is selected
OR An image is selected
OR An image and some text is selected
When The user presses Ctrl + C
OR the user right clicks and selects copy
OR the user selects Edit + Copy

Запись вашего предложения Then будет кошмаром.

Вместо этого попробуйте два теста ... сначала, как предложено @nemesv - но с«выделение текста» заменено общим «выделением».

Scenario Outline: TestCopy
  Given I have made a selection
  When <Copy operation executed>
  Then my selection is copied to the clipboard

Examples: 
  | Copy operation executed                |
  | The user presses Ctrl + C              |
  | the user right clicks and selects copy |
  | the user selects Edit + Copy           |

Затем вы можете написать один или несколько дополнительных тестов, чтобы разобраться с «что делает правильный выбор» - и это, вероятно, будет с помощью функции, котораявы используете независимо от функции копирования - например, что происходит, когда вы делаете выделение и нажимаете клавишу delete ... или ctrl-v ... или перетаскиваете?

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

0 голосов
/ 19 февраля 2012

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

...