我想在特征文件中使用数据表,并在步骤定义中将内容转换为单个特定类型。例如,我希望能够将以下数据表转换为User类的单个实例。
Given the user is
| firstname | lastname | nationality |
| Roberto | Lo Giacco | Italian |
Run Code Online (Sandbox Code Playgroud)
用户类:
class User {
String firstName;
String lastName;
Nationality nationality;
//getters / setters / etc
}
Run Code Online (Sandbox Code Playgroud)
步骤定义:
@Given("^the user is$")
public void the_user_is(User user) {
this.user = user;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此命令时,出现以下错误:
banana.runtime.CucumberException:黄瓜.runtime.CucumberException:不是地图或列表类型:类example.User
该文档建议可以将数据表转换为单个对象。
但是,通过检查代码,看起来它总是会返回一个列表。该代码段来自cucumber / runtime / table / TableConverter.convert(DataTable dataTable,类型,布尔值转置):
Type itemType = listItemType(type);
if (itemType == null) {
throw new CucumberException("Not a Map or List type: " + type);
}
Run Code Online (Sandbox Code Playgroud)
我知道它适用于列表:
@Given("^the user is$")
public void the_user_is(List<User> user) {
this.user = user.get(0);
}
Run Code Online (Sandbox Code Playgroud)
但是在我的实际步骤中(而不是此简化的示例),仅需要创建一个对象,因此我想避免使用列表然后选择第一个项目。
GitHub 上的cucumber-jvm存储库中有一个关于此问题的老问题。它最近被标记为一个错误,预计将在 2.1 版本中得到解决。
https://github.com/cucumber/cucumber-jvm/issues/741