Огурец: как организовать сложный тестовый набор - PullRequest
5 голосов
/ 17 февраля 2011

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

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

features/
  v1/
    something.feature
    step_definitions/
      something_steps.rb
  v2/
    something.feature
    step_definitions/
      something_steps.rb
  v3/
    something.feature
    step_definitions/
      something_steps.rb

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

Я тогда подумал о следующей структуре:

features/
  v1/
    something.feature
  v2/
    something.feature
  v3/
    something.feature
  step_definitions/
    something_steps.rb

Я бы определил переменную в файле объектов где-нибудь, указывая, для какой версии он предназначен, и у меня будет куча «если» внутри файла шагов, чтобы выбрать пути кода в зависимости от этой переменной версии. Тем не менее, я не нашел очевидного способа определения этой переменной в файле объектов.

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

v1/
  features/
    something.feature
    step_definitions/
      something_steps.rb
v2/
  features/
    something.feature
    step_definitions/
      something_steps.rb
v3/
  features/
    something.feature
    step_definitions/
      something_steps.rb

1 Ответ

6 голосов
/ 18 февраля 2011

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

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

Если изменения меньше, я бы посоветовал посмотреть на теги и hooks чтобы достичь того, что вы хотите.

Таким образом, ваша функция может выглядеть так:

@v1
Feature: some feature
  In order to test different versions
  As a cucumber user
  I want to be able to change step definitions based on what version feature is running

  Scenario: some scenario
    Given some thing
    When I pass some method
    Then I should get something

И определение вашего шага может выглядеть так:

Before('@v1') do
  Thing = V1Thing
  VERSION = 1
end

Given /^some thing&/ do
  @thing = Thing.new
end

When /^I pass some method$/ do
  @thing.some_action!
end

Then /^I should get something$/
  thing = "something" if VERSION == 1
  thing = "something else" if VERSION == 2
  @thing.prop.should == thing
end

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

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