java - Cucumber 4.7.2 将表转换为行到对象

标签 java cucumber

我使用的是JAVA Cucumber 4.7.2

我正在将数据从 Cucumber 表转换为对象/模型。

cucumber 场景:

  Scenario: test
    Given Create company
      | NAME  | ADDRESS        |
      | Apple | Some address 1 |

步骤实现:

And("^Create company$", (DataTable table) ->
{
    List<Company> companies = table.asList(Company.class);
    companies.forEach(c -> c.createModel());
});

公司模式:

public class Company
{
    private String name;
    private String address;
    private Map<String, String> rowData;

    public Company(Map<String, String> rowData)
    {
        this.rowData = rowData;
    }

    public void createModel()
    {
        name = getRowValue("COMPANY");
        address = getRowValue("ADDRESS");
    }

    public String getRowValue(String header)
    {
        String value = rowData.get(header);

        if (Strings.isNullOrEmpty(value))
        {
            throw new NullPointerException("Value for header [" + header + "] is required, but was NULL");
        }
        return value;
    }
}

DataTableConfigurer

public class DataTableConfigurer implements TypeRegistryConfigurer
{
    @Override
    public Locale locale()
    {
        return Locale.ENGLISH;
    }

    @Override
    public void configureTypeRegistry(TypeRegistry registry)
    {
        registry.defineDataTableType(new DataTableType(Company.class, Company::new));
    }
}

现在工作正常,数据从 Cucumber 表加载,并转换为模型。

我正在尝试修改上面的内容,以允许Company模型具有空构造函数,并传递rowData使用方法,例如:

public class Company
{
    private String name;
    private String address;
    private Map<String, String> rowData;

    // no / empty constructor

    /*
     * Passing rowData using method, not by constructor
     */
    public void setRowData(Map<String, String> rowData)
    {
        this.rowData = rowData;
    }

    public String getRowValue(String header)
    {
        String value = rowData.get(header);

        if (Strings.isNullOrEmpty(value))
        {
            throw new NullPointerException("Value for header [" + header + "] is required, but was NULL");
        }
        return value;
    }
}

但我不知道如何编辑DataTableConfigurer以允许这样做。

最佳答案

类似这样的吗?

typeRegistry.defineDataTableType(new DataTableType(Company.class,  (Map<String, String> entry) -> {
    Company o = new Company();
    o.setRowData(entry);
    return o;
}));

关于java - Cucumber 4.7.2 将表转换为行到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59949614/

相关文章:

Java Spring Rest API。返回引用的对象或对象的 id?

java - 如何使用 Maven 运行并行 Cucumber Spring Boot 集成测试(surefire 或 failuresafe)?

ruby - 通过忽略 cucumber 中的顺序断言两个 json 内容

java - session 属性从过滤器传递到 servlet 的机制是什么?

java - 在具有 2 个内核的机器上拥有 2 个以上的工作线程是否有意义?

selenium-webdriver - 我如何在 cucumber 中运行特定场景

ruby-on-rails - 如何使用多行字符串示例比较 Cucumber 步骤中的 xml 输出?

Cucumber V4 [io.cucumber] 无法识别 @Given/When/Then 并给出错误 "The import cucumber.api.java.en.When cannot be resolved"

java - 如何限制 JTextArea 只接受一组合法的字符?

java - 我什么时候应该在 LinkedBlockingQueue 上使用 SynchronousQueue