2016-10-04 3 views
0

Я использую Cucumber-JVM.вызов огурца/подпроцесс

У меня есть процесс и подпроцесс. Процесс вызывает подпроцесс, а затем продолжается.

В идеале я хочу следующие сценарии:

Scenario: Process 
Given I start a process 
When I have completed the sub process 
And then I complete task A 
And then I complete task B 
Then the process is finished 

Scenario: SubProcess 
Given I start a subprocess 
When I complete task C 
And then I complete task D 
Then the process is finished 

Я задаюсь вопросом, что лучший подход к кодированию «Когда я закончил процесс суб»

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

+0

Так подпроцесс также отдельный сценарий, который может работать на его своя? Не можете ли вы дублировать шаги подпроцесса вместе с данными внутри сценария процесса? – Grasshopper

+1

Hey Grasshopper, да, суб-процесс может работать сам по себе, но есть несколько задач +10 и т. Д., Которые я не хочу поддерживать в двух местах. – IanWatson

ответ

0

Возможно, это не тот ответ, который вы ищете ... но то, что я делаю в этих случаях, создает «новый» шаг, объединяющий все этапы, связанные с сценарием. Я знаю, что это не изящное решение, но я думаю, что нет других вариантов в cucumber-jvm. Смотрите этот closed issue

Пример для случая использования:

@When("^I have completed the sub process$") 
public void I_have_completed_the_sub_process() throws Throwable { 
I_complete_task_C(); 
I_complete_task_D(); 
the_process_is_finished(); 
} 

Затем, вы можете использовать этот новый шаг в given сценарии фоновых условий. Что-то вроде этого:

Background: 
Given I have completed the sub process 

Scenario: Process 
Given I start a process  
And then I complete task A 
And then I complete task B 
Then the process is finished 

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

+1

Спасибо, troig, проблемы с этим в том, что подпроцесс - это набросок сценария, который требует конфигурации, которую я хочу сохранить в Gherkin и из Java. – IanWatson

+0

Добро пожаловать @IanWatson, и вы правы. это позор не может ссылаться на другой сценарий ... Я сделал небольшое изменение в своем ответе, используя фон. Я думаю, что это понятно, но ваша проблема все равно останется. Я буду ждать и других ответов. – troig

0

Если я правильно понял вопрос, предполагая, что вы хотите запустить SubProcess только один раз для процесса, то вы ищете таблицу (или схему сценария).

Scenario: Process 

Given I start a process 
When I have completed the sub process "<x>" "<y>" "<z>" 
| x | y | z| 
And then I complete task A 
And then I complete task B 
Then the process is finished 

или

Scenario Outline: Process 
Given I start a process 
When I have completed the sub process "<x>" "<y>" "<z>" 
And then I complete task A 
And then I complete task B 
Then the process is finished 
| x | y | z| 

Scenario Outline: SubProcess 
Given I start a subprocess "<x>" 
When I complete task C "<y>" 
And then I complete task D "<z>" 
Then the process is finished 
Examples: 
| x | y | z | 

@When("^I have completed the sub process (.*) (.*) (.*)$") 
public void I_have_completed_the_sub_process(String x, String y, String z) throws Throwable { 
    I_start_a_subprocess(x); 
    ..... 
    <your code>; 
} 

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

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

YAML файл:

:configuration: 
    :x: "val1" 
    :y: "val2" 
    :z: "val3" 

И ваш шаг занимает только один вход

When I have completed the sub process "<configuration>" 

Определение шага разбирает HashMap и передает значения к методам шагов по мере необходимости.

Или вы можете иметь значение в виде таблицы, создать класс конфигурацию и определение шага принимает значение списка в качестве входных данных: https://thomassundberg.wordpress.com/2014/06/30/cucumber-data-tables/

public class Config{ 
private String x, 
private String y, 
Private String z } 

public void step_definition_function(<List>Config config){} 
+0

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

+0

Hmm..Cucumber не поддерживает вызов сценария в другом. Скорее всего, вам придется пройти один и тот же набор данных. Есть только три способа, о которых я могу думать: 1. Данные в таблице хранятся в источнике данных, таком как yaml, и оба ямла принимают одну таблицу столбцов, ссылаясь на нее, поэтому все, что вам нужно будет сделать, это вызвать тот же ключ в обоих или 2. Детали конфигурации непосредственно обрабатываются в определениях шагов, а не в файле свойств, если вы не хотите передавать конфигурацию в таблице. 3. Преобразуйте подпроцесс в один шаг. – Sid

+0

# 1 может быть хорошим криком – IanWatson

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