Можем ли мы связать один шаг огурца с двумя разными методами в двух разных классах?

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

у нас есть какие-либо конфигурации для этого?


person VarunRaje    schedule 17.03.2016    source источник


Ответы (2)


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

То, что я получаю от вашего объяснения, это нечто иное. Итак, у вас есть 2 файла функций с общим шагом. Один файл функций получает свои шаги из файла классов A, а другой файл функций получает свои шаги из файла классов B?

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

person Anand    schedule 17.03.2016
comment
Нет, и это совсем другое, у меня есть один шаг мошенника в обоих файлах, и я хочу выполнить метод в зависимости от сценария. Ex add 10 из Maths.feature должен выполнять форму метода MathsStepDef.java и добавлять 10 из операции substract.feature должен выполнять метод из SubstractStepdef.java - person VarunRaje; 17.03.2016
comment
Пожалуйста, поделитесь кодом, описывающим то, что вы хотите. И помните, что Cucumber найдет метод везде, где он определен. Два шага в одном сценарии вызовут два вызова метода. Эти методы могут быть определены в двух разных классах. - person Thomas Sundberg; 18.03.2016

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

  @some_tag
  Scenario: This is scenario 1
    Given I do this thing

  @some_other_tag
  Scenario: This is scenario 2
    Given I do this thing

тогда вы можете создать крючок, который отслеживает

Before('@some_tag') do
  @this = "foo"
end

Before('@some_other_tag') do
  @this = "bar"
end

Затем с вашего шага вы запускаете код в зависимости от значения @this var.

Given(/^I do this thing$/) do
  if @this.eql? "foo"
    <do some code>
  elsif @this.eql? "bar
    <do something else>
  else
    <do other things>
end

Но правда, после всего этого... У вас должно быть просто два разных шага

Given I do this Foo Thing

а также

Given I do this Bar Thing

Это помогло бы лучше описать, что на самом деле делает тест.

person Jarod Adair    schedule 22.03.2016