黄瓜Java将数据表转换为特定类型

时间:2017-07-21 10:28:10

标签: java cucumber

我想在我的要素文件中使用数据表,并在步骤定义中将内容转换为单个特定类型。例如,我希望能够将以下数据表转换为User类的单个实例。

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

用户类:

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:不是Map或List类型:class example.User

文档表明可以将数据表转换为单个对象。

Cucumber Transpose API Docs

然而,通过检查代码,它看起来总会返回一个列表。此代码段来自cucumber / runtime / table / TableConverter.convert(DataTable dataTable,Type type,boolean transposed):

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 :(得分:3)

GitHub上 cucumber-jvm repo中存在一个关于此问题的旧问题。它最近被标记为一个错误,预计将在2.1版本中解决。

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