2016-03-31 4 views
0

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

Scenario: a 
    Given that the app is open 
    When I open a certain dialog 
    Then it has a thing somewhere 

Scenario: b 
    Given that the dialog from 'a' is open... 

# Imagine here a long chain of scenarios, each depending on the previous 

Scenario: n 
    Given that the previous 'n' steps have all completed.... 

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

Это не относится к кому-то, используемому для модульного тестирования, но эти сценарии не будут разделены и выполняться отдельно.

Какая у вас лучшая практика?

Должен ли я переписать один очень длинный сценарий?

Я уже использую «объект страницы», чтобы сохранить большую часть моего кода из определений шагов. Должен ли я кодировать шаги как одиночные вызовы, которые могут быть повторно использованы в последующих сценариях?

Я использую огурец в Javascript.

ответ

1

Первые вещи первых, предупреждение:

Для большинства тестов (и большинство я имею в виду 99,9% времени), вы не должны вести от предыдущего сценария, из-за того что если один сценарий завершится неудачно в вашей функции, больше будет рушиться, потому что вы попытались связать их вместе.

И на мой ответ:

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

  1. Сделайте первый сценарий фон
  2. Сделать первый сценарий в определении шага, для использования в нескольких художественных файлов

Для первых:

Background: 
    Given that the app is open 
    When I open a certain dialog 
    Then it has a thing somewhere 

Scenario: a 
    Given that the dialog from 'a' is open... 

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

Для вторых:

Scenario: a 
    Given that the app is open 
    When I open a certain dialog 
    Then it has a thing somewhere 

Scenario: b 
    Given I have opened the dialogue from a 
    And the '<DialogFromA>' dialog is open... 
+3

Я согласен с тобой 99.99% времени. В течение 0,01% времени, когда вы думаете, что использовать состояние из предыдущего сценария, я не согласен. Просто мое догматическое мнение. Это состояние требует, чтобы сценарии выполнялись в определенном порядке, а не на сетке. –

+2

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

+0

Спасибо, @KyleFairns. Я отредактировал вопрос, чтобы попытаться подчеркнуть, что функция имеет очень длинную цепочку сценариев, каждая из которых зависит от ее предшественника. – LeeGee

1

Я хотел бы спросить себя, что реальное поведение за все шаги?

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

Помните, что BDD и Cucumber - это все, что доступно для человека.Зависимости, о которых вы просите, должны, на мой взгляд, быть реализованы в кодах поддержки Gherkin.

+0

«Помните, что BDD и Cucumber - это все, что доступно для чтения человеком». --- Я думаю, что это козырь, спасибо. – LeeGee

Смежные вопросы