2016-10-17 2 views
0

をobjectにシナリオアウトラインから文字列のリストを変換する:方法例えば、オブジェクトへのシナリオの概要から文字列のリストを変換する方法はあり

Scenario Outline: eligibility rules 
    When I specify habitation details 
     | <you_are> | <nature> | <pro> | 

Examples: 
     | you_are| nature | pro | 
     | PNO | Living | No | 
     | PO | Pro | yes | 

中に、:

class Entry { 
    String you_are; 
    String nature; 
    String pro ; 
} 

@When("I specify habitation details") 
    public void specifyHabitationDetails(Entry entry) { 

私はあなたがデータテーブルを使用してオブジェクトのリストを渡すことができますが、それは私が欲しいものではないことを知っています。シナリオの概要の利点は、各行がクリーンな状態から繰り返されることです。

+0

あなたはここに変換する必要があるのはなぜ? CucumberはREGEXを使用して、これらのテストケースを識別します。これは、テスト内でクラスを作成できることからです。私はあなたがそれをしようとしている方法が正しいとは思わない。 – px06

答えて

1

ScenarioOutlineの例では、DataTableのログインを再利用できます。例の表の各行は、あなたが清潔なスレートと言ったようになります。

DataTableを使用するようにフィーチャーとステップ定義を変更します。ヘッダーは、CucumberのEntryクラスの変数名と一致してオブジェクトを自動的に作成する必要があります。また、Entryクラスに3つのargコンストラクターを提供する必要があります。

When I specify habitation details 
| you_are | nature | pro | 
| <you_are> | <nature> | <pro> | 

例の部分は同じまま...

@When("I specify habitation details") 
    public void specifyHabitationDetails(List<Entry> entry) { 

      Entry e = entry.get(0); 
    } 
+0

ありがとう、これは動作します! 唯一の問題は、1つの要素でリストを取得することです。私は私のオブジェクトを取得するためにentry.get(0)する必要があります。 実際のObjectを直接取得する方法はありますか?常に1つのオブジェクトがリストでなければなりません。 – loonis

+1

デフォルトでは、DataTableは複数のデータ行を検索します。 Entryオブジェクトを直接必要とする場合は、フィーチャー・ファイルのステップに渡された区切り文字列でハックを少し外してみてください。 - 居住の詳細を指定するとき @ @ stepDefinition - public void specifyHabitationDetails(エントリエントリ)を変更します。区切り文字列を引数として、Entryクラスに単一の引数コンストラクタを作成します。変数を初期化するロジックを配置します。キュウリは自動的にこのコンストラクタを呼び出し、Entryオブジェクトを与えます。 – Grasshopper

関連する問題