java - 用于 cucumber-jvm 的自定义数据表转换器

标签 java cucumber cucumber-jvm

我想在 cucumber 中创建自定义数据表转换器。这是我的功能的样子:

Given board
| o | _ | _ |
| o | _ | _ |
| o | _ | _ |

我想把它放到自定义对象中。假设它看起来像这样:

class Board {

    private List<List<String>> board;

    public Board(List<List<String>> board) {
        this.board = board;
    }

}

我的步骤定义应该是这样的:

@Given("^board$")
public void board(Board board) throws Throwable {
    // todo
}

步骤定义适用于 DataTable类和 List<List<String>>

@Given("^board$")
public void board(DataTable board) throws Throwable {
    // this works fine
}

这也很好用

@Given("^board$")
public void board(List<List<String>> board) throws Throwable {
    // this also works fine
}

我试图在互联网上找到解决方案,但没有成功。我还尝试创建 Transformer但是,正如我所见,它仅适用于字符串(我想在输入中使用 Datatable 或 List>):

class BoardTransformer extends Transformer<Board> {

    @Override
    public Board transform(String value) {
        // TODO Auto-generated method stub
        return null;
    }

}

最佳答案

在 Cucumber 3.x 中,您可以使用 TypeRegistryConfigurer 通知 Cucumber 如何从 DataTable 创建 Board 对象。因为您想将整个表转换为单个对象,所以您必须使用 TableTransformer 而不是 TableCellTransformerTableEntryTransformerTableRowTransformer.

您可以将 TypeRegistryConfigurer 放在粘合路径的任何位置。

package io.cucumber.java.test;

import io.cucumber.core.api.TypeRegistryConfigurer;
import io.cucumber.core.api.TypeRegistry;
import io.cucumber.datatable.DataTableType;
import io.cucumber.datatable.TableTransformer;

import java.util.List;
import java.util.Locale;

import static java.util.Locale.ENGLISH;

public class TypeRegistryConfiguration implements TypeRegistryConfigurer {

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


    @Override
    public void configureTypeRegistry(TypeRegistry typeRegistry) {
        typeRegistry.defineDataTableType(new DataTableType(
            Board.class,
            (TableTransformer<Board>) table -> new Board(table.cells())));

    }

    static class Board {

        private final List<List<String>> board;

        private Board(List<List<String>> board) {
            this.board = board;
        }
    }
}

关于java - 用于 cucumber-jvm 的自定义数据表转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28338999/

相关文章:

java - 将pdf转换为word doc文件

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure

testing - 如何为 Karate 功能使用动态值

java - org.openqa.selenium.WebDriverException : disconnected: not connected to DevTools error using ChromeDriver Chrome using Selenium and Java

maven - Dcucumber.options,如何有多个标签

java - 如何获得 Cucumber 特征的结果

java - Android,UnknownHostException : www. google.com,在设备上,而不是模拟器上

java - Tomcat 8.5 内存

javascript - 定义两个级别的登录过程 Cucumber 测试场景

ruby-on-rails - 使用cucumber时,如何选择 'test'数据库?