java - Cucumber Java 将数据表转换为特定类型

标签 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: Not a Map or List type: 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);
 }

但在我的现实世界步骤(而不是这个简化的示例)中,只有一个对象需要创建,我想避免使用列表然后获取第一个项目。

最佳答案

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

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

关于java - Cucumber Java 将数据表转换为特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235295/

相关文章:

intellij-idea - 执行 JUnit 运行程序类时没有可用的任务

java - 如何从Java中的XML文件中读取\n等特殊字符?

java - 自动化测试如何知道下载后的文件名?

java - 创建可配置的依赖资源

ruby-on-rails - 测试 XML 和 HTTP 响应的 RSpec 方法?

java - 在 Cucumber 步骤定义上传递多个参数

java - 使用标准/输出流作为字符串输入/输出

java - 如何获取智能手机上安装的防病毒信息?

java - 如何写一个简单的公平锁?

java - 配置 @RunWith 以在 IntelliJ 运行器中使用 CucumberWithSerenity.class 而不是 Cucumber.class