2017-07-21 14 views
3

私のフィーチャファイルでデータテーブルを使用し、ステップ定義でコンテンツを1つの特定のタイプに変換したいとします。例として、次のデータテーブルをUserクラスの単一のインスタンスに変換できるようにしたいと考えています。キュウリJavaのデータテーブルを特定のタイプに変換する

Given the user is 
    | firstname | lastname | nationality | 
    | Roberto | Lo Giacco | Italian  | 

Userクラス:

class User { 
    String firstName; 
    String lastName; 
    Nationality nationality; 
//getters/setters/etc 
} 

ステップ定義:私はこれを実行すると

@Given("^the user is$") 
public void the_user_is(User user) { 
    this.user = user; 
} 

は、しかし、私は次のエラーを取得する:

cucumber.runtime.CucumberException: cucumber.runtime.CucumberException: Not a Map or List type: class example.User

ドキュメントには、ことを示唆していますaを変換することは可能ですデータテーブルを単一のオブジェクトに変換します。

Cucumber Transpose API Docs

しかし、それは常にリストを返しますように見えるコードを検査するから。このコードスニペットは、キュウリ/ランタイム/テーブル/ TableConverter.convert(DataTableののdataTable、タイプtype、boolean型転置)からです:

Type itemType = listItemType(type); 
if (itemType == null) { 
    throw new CucumberException("Not a Map or List type: " + type); 
} 

私はそれがリストの作品を知っている:

@Given("^the user is$") 
public void the_user_is(List<User> user) { 
    this.user = user.get(0); 
} 

が、私の中に現実世界のステップ(この単純化された例ではなく)は、作成する必要があるオブジェクトが1つしかなく、リストの使用を避けて最初のアイテムを取得したい。

+0

なぜステップテーブルにデータテーブルを渡しませんか? –

+1

要点は、ステップ定義でDataTableまたはListを持つ必要はなく、フィーチャーファイルで定義されたオブジェクトの単一インスタンスを直接指定することです。 – DaveJohnston

答えて

1

この問題に関する古い問題は、cucumber-jvm GitHubのレポにあります。最近、バグとして分類され、リリース2.1で解決される予定です。

https://github.com/cucumber/cucumber-jvm/issues/741

+0

このバグは@Transposeアノテーションに特有ですが、転置されたデータテーブルを使用するのか、通常のデータテーブルを使用するのかは可能です。私はこれを明らかにするためにバグにコメントしました。このバグの一部として解決されると私は信じて答えを受け入れる – kceeeeee

関連する問題