(Gherkinの代わりに)Javaを使用してCucumber DataTableを手動で設定したい。
ガーキンでは、私のテーブルは次のようになります。
| h1 | h2 |
| v1 | v2 |
私のJavaこれまでのところ、このように見えます:
List<String> raw = Arrays.asList( "v1", "v2");
DataTable dataTable = DataTable.create(raw, Locale.getDefault(), "h1", "h2");
返されるのは、ヘッダーはあるが内容はないDataTableです。また、予想よりも長いです:
| h1| h2 |
| | |
| | |
解決策はかなり単純でなければならないはずですが、今は少し途方に暮れています。テーブルを取得するにはどうすればよいですか?
お役に立てれば。ガーキンスの手順が完全であれば、次のようになります...
When I see the following cooked I should say:
| food | say |
| Bacon | Yum! |
| Peas | Really? |
これはJavaで必要です。 (渡された cucumber.api.DataTable は、テスト前の期待値で設定されていることに注意してください)。
@When("^I see the following cooked I should say:$")
public void theFoodResponse(DataTable expectedCucumberTable) {
// Normally you'd put this in a database or JSON
List<Cuke> actualCukes = new ArrayList();
actualCukes.add(new Cuke("Bacon", "Yum!"));
actualCukes.add(new Cuke("Peas", "Really?"));
Another link to a Full Example.diff(actualCukes)
}
AslakHellesøyの例では、彼は実際にはDataTableを使用していません。
彼はあなたの例を次のようにします:
@When("^I see the following cooked I should say:$")
public void theFoodResponse(List<Entry> entries) {
for (Entry entry : entries) {
// Test actual app you've written
hungryHuman.setInputValue(entry.food);
hungryHuman.setOutputValue(entry.say);
}
}
public class Entry {
String food;
String say;
}
もっと読むための完全な例については、チェックアウト:
編集:
@Christianのやりすぎで申し訳ありませんが、アプリでそれを使用する方法のコンテキスト全体がおそらく必要ではなく、DataTable.createを使用するクリーンな方法とほとんどのこと私が投稿したのは、Entryクラスを使用してその猫のスキンを作成する別の方法です(後でこれを読む人に役立つかもしれません)。
つまり、コメントでのやり方はそれほど遠くありませんでした。私はコレクションのプロではないので、文字列の2Dリストを作成するためのヒントを提供することはできませんが、最後の2つのパラメーター(4つすべてを使用している場合)を明確にすることができます。
。
List<List<String>> infoInTheRaw = Arrays.asList( Arrays.asList("h1", "h2"),
Arrays.asList("v1", "v2") );
DataTable dataTable = DataTable.create(infoInTheRaw);
同様に面倒なコンストラクタを使用することもできます。 :)
DataTableの代わりに、データテーブルと同じフィールドを使用してカスタムオブジェクトのリストを実際に作成できます。
例えば.
Then the book list response should contain records as
| book_id | book_title | book_cost |
| B0001 | Head First Java | 350|
| B002 | Head First Spring| 550|
これで、StepクラスはStepを次のように定義する必要があります
@Then("^the book list response should contain records as$")
public void validateBookRecords(List<Book> booksList) throws Throwable { //assertions will go here}
そして、Bookクラスは次のようになります。
public class Book {
public String book_id;
public String book_title;
public String book_cost;
}
フィールドはすべてパブリックなので、ゲッター/セッターは必要ありません。それらを非公開と宣言することにした場合(理由は表示されません)、ゲッター/セッターも追加してください。
お役に立てれば