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

Hey Grasshopperはい、サブプロセスは単独では動作しますが、2つの場所で維持したくない複数のタスク+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

私が質問を正しく理解している場合、プロセスに対して1回だけサブプロセスを実行したいと仮定した場合、探しているものはテーブル(またはシナリオのアウトライン)です。

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>" 

をとるステップの定義は、ハッシュマップを解析し、必要に応じてステップの方法に値を渡します。

それとも、テーブルとして値を持つクラスコンフィギュレーションを作成し、ステップの定義は、入力として、リストの値をとることができます。 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

Hmm..cucumberは別のシナリオ内でシナリオを呼び出すことはできません。おそらく、同じデータセットを渡す必要があります。私は考えることができる3つの方法があります:1.テーブルのデータは、yamlのようなデータソースに格納され、両方のyamlsはそれを参照する単一の列テーブルを取るので、両方で同じキーを呼び出すだけです2.テーブルの設定を渡す必要がない場合は、設定の詳細はステップ定義で直接処理され、機能ファイルでは処理されません。 3.サブプロセスをステップに変換します。 – Sid

+0

#1は良い叫びになることができます – IanWatson

関連する問題