java - Cucumber 3+ - UndefinedDataTableTypeException : Can't convert DataTable to Map<String, boolean 值>

标签 java cucumber-jvm

我的小 cucumber 脚本:

Then I update checkboxes and check radio list 'DEMO_HOME-agree' with 'yes':
    |yes|true|
    |no|false|

我的 cucumber 代码:

@Then("I update checkboxes and check radio list {string} with {string}:")
public void selectCheckbox(String elementKey, String valueKey, Map<String, Boolean> values) throws TechnicalException, FailureException {
    selectCheckbox(this.demoPage.getPageElementByKey(elementKey), true);
    selectCheckbox(this.demoPage.getPageElementByKey(elementKey), valueKey, values);
    checkRadioList(this.demoPage.getPageElementByKey(elementKey), valueKey);
}

我有这个错误:

io.cucumber.datatable.UndefinedDataTableTypeException: Can't convert DataTable to Map<java.lang.String, java.lang.Boolean>.
Please register a DataTableType with a TableEntryTransformer or TableCellTransformer for java.lang.Boolean.
    at io.cucumber.datatable.UndefinedDataTableTypeException.mapNoConverterDefined(UndefinedDataTableTypeException.java:24)
    at io.cucumber.datatable.DataTableTypeRegistryTableConverter.convertEntryValues(DataTableTypeRegistryTableConverter.java:333)
    at io.cucumber.datatable.DataTableTypeRegistryTableConverter.toMap(DataTableTypeRegistryTableConverter.java:209)
    at io.cucumber.datatable.DataTableTypeRegistryTableConverter.convert(DataTableTypeRegistryTableConverter.java:63)
    at io.cucumber.datatable.DataTable.convert(DataTable.java:362)
    at io.cucumber.stepexpression.StepExpressionFactory$3.transform(StepExpressionFactory.java:73)
    at io.cucumber.stepexpression.DataTableArgument.getValue(DataTableArgument.java:19)
    at cucumber.runner.PickleStepDefinitionMatch.runStep(PickleStepDefinitionMatch.java:68)
    at cucumber.runner.TestStep.executeStep(TestStep.java:63)
    at cucumber.runner.TestStep.run(TestStep.java:49)
    at cucumber.runner.PickleStepTestStep.run(PickleStepTestStep.java:43)
    at cucumber.runner.TestCase.run(TestCase.java:44)
    at cucumber.runner.Runner.runPickle(Runner.java:40)
    at cucumber.runtime.junit.PickleRunners$NoStepDescriptions.run(PickleRunners.java:146)
    at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:68)
    at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:23)

在我的 DataTableConfigurer 中:

public class DataTableConfigurer implements TypeRegistryConfigurer {

    @Override
    public Locale locale() {
        return Locale.ENGLISH;
    }

    @Override
    public void configureTypeRegistry(TypeRegistry registry) {
        registry.defineDataTableType(new DataTableType(Map.class, new TableEntryTransformer<Map>() {
            @Override
            public Map<String, Boolean> transform(Map<String, String> entries) {
                Map<String, Boolean> newMap = new HashMap<>();
                entries.forEach((k, v) -> newMap.put(k, Boolean.parseBoolean(v)));
                return newMap;
            }
        }));
    }

}

最佳答案

您已经注册了TableEntryTransformer对于通用Map输入而不是 Map<String, Boolean>我怀疑你是有意这么做的。

但是错误消息询问您是否愿意

Please register a DataTableType with a TableEntryTransformer or TableCellTransformer for java.lang.Boolean.

您可以通过以下方式执行:

@Override
public void configureTypeRegistry(TypeRegistry typeRegistry) {
    typeRegistry.defineDataTableType(
            new DataTableType(
                    Boolean.class,
                    Boolean::parseBoolean
            ));
}

此外,因为您的表格的标题没有位于顶部,而是位于侧面,因此您必须调换表格。这会将您的表格变成:

|yes|no|
|true|false|

您可以在功能文件中重新调整表格的方向或使用 @cucumber.api.Transpose values 的注释参数:

public void selectCheckbox(String elementKey, String valueKey, @Transpose Map<String, Boolean> values) throws TechnicalException, FailureException {

关于java - Cucumber 3+ - UndefinedDataTableTypeException : Can't convert DataTable to Map<String, boolean 值>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093832/

相关文章:

java - 垃圾收集器Java应用程序无法释放POD Kubernetes中的内存。

java - 如何在各自的测试文件夹中为每个测试生成 cucumber.json (我使用的是 Cucumber 5,它使用 TestNG 进行并行执行)

java - 如何在没有任何功能文件的情况下运行 Cucumber?

cucumber-jvm - 从可执行 JAR 运行单个 cucumber 场景

android - 测试测试 (AVD) - 失败 : Instrumentation run failed due to 'java.io.IOException'

java - (声乐代码)需要一些帮助来寻找文本到语音的插件

java - 运行 AspectJ 导致 NoSuchMethodError : Aspect. aspectOf

java - 如何检查tomcat服务器是否正在监听特定端口?

java - 从文件读取对象的 ArrayList 时出错?

java - Cucumber 功能文件不使用 Maven 执行