2016-10-04 40 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 

我想知道最好的辦法是什麼編碼「當我已經完成了子流程」

我讀了一些關於調用步驟但是從步驟定義中,它們在cucumber-jvm中不受支持。這是唯一可用的選擇還是有其他的?理想情況下,我會調用整個場景而不是單個步驟。

+0

因此子進程也是一個獨立的情況下,可以在工作的擁有?您是否可以不重複子流程步驟以及流程場景中的數據? – Grasshopper

+1

嘿蚱蜢,是的子過程可以自己工作,但有多個任務+10等,我不想在2個地方保持。 – 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

不客氣@IWanWatson,你是對的。這是一個恥辱不能參考其他情況...我在我的答案,使用背景做了一點編輯。我認爲它更清晰,但你的問題仍然會存在。我還會等待其他答案。 – troig

0

如果我正確理解了這個問題,假設您只想爲流程運行一次子流程,那麼您要查找的是一張表(或一個場景概要)。

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

感謝您的回覆Sid,但我不認爲這會奏效,子過程是一個數據表的場景。我沒有看到我將如何在數據表中執行場景,而無需在過程中定義相同的數據表。 – IanWatson

+0

嗯..銅錢不支持在另一個場景中調用場景。您很可能必須傳遞相同的數據集。我能想到的只有三種方法:1.表中的數據存儲在像yaml這樣的數據源中,並且兩個yamls都只有一個列表引用它,所以你只需要在兩者中調用相同的鍵2.如果您不想在表中傳遞配置,配置詳細信息將直接在步驟定義中處理,而不是在功能文件中處理。 3.將您的子流程轉換爲一個步驟。 – Sid

+0

#1可能是一個很好的留言 – IanWatson