java - JUnit 5 - 将多个 CSV 文件参数转换为单个对象

标签 java csv parameters junit5

大家好,Java 测试人员。 几天前我开始使用 JUnit 5,因为我喜欢创建参数化测试的新方法。

@ParameterizedTest 允许测试以参数化方式运行,@CsvFileSource 从 CSV 文件加载参数。

问题是我的 CSV 中有太多列并且不想在我的单元测试中有一个巨大的方法签名。让我举个例子:

@ParameterizedTest
@CsvFileSource(resources = "/test-data.csv")
void myTest(String p1, String p2, String p3, String p4, String p5, String p6) {
    //test using parameters
}

我想知道是否有某种转换器可以为我做这样的事情:

@ParameterizedTest
@CsvFileSource(resources = "/test-data.csv")
void myTest(@ConvertWith(TestDataConverter.class) TestData testData) {
    //test using parameters
}

static class TestDataConverter implements TestConverter{
    public TestData convert(Object ... params){
       //a simple method that creates the TestData object and inserts the params in it
    }
}

就是这样。

最佳答案

更新的答案

从 JUnit Jupiter 5.2 开始:,有专用的 ArgumentsAggregatorArgumentsAccessor API 正是用于此目的。

看看 PersonAggregator JUnit 用户指南中的 example 中的具体示例。

原始答案

从 JUnit Jupiter 5.0 开始:不,目前没有开箱即用的转换器可以为您做到这一点。

原因:JUnit Jupiter 中的参数化测试支持不支持从多个参数到单个参数的映射。因此,正如@Sormuras 所建议的那样,您可以打开一个问题来推荐它。

在执行实际转换方面,您可以考虑使用 uniVocity-parsers ,JUnit Jupiter 在内部使用它来解析 CSV 文件。 uniVocity-parsers 还支持直接从 CSV 文件映射到 beans,但要使用它,您需要实现自己的 @TestTemplate 来读取 CSV 文件并执行映射。

其他选项包括来自 Jackson framework 的 CSV 支持或来自 JSefa project .

关于java - JUnit 5 - 将多个 CSV 文件参数转换为单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47552585/

相关文章:

c++ - C++ 中快速、简单的 CSV 解析

java - MongoDB Java API : Full-text search

java - 在 java 中创建一个计数计时器(仅秒和毫秒)

java - Hadoop 如何拆分和组合其输出数据?

javascript - Angular URL 参数在 Chrome 中被删除

ng-change 中不考虑 Jquery datepicker 选择的日期 - AngularJS

Python 新手 : Returning Multiple Int/String Results in Python

java - 使用 mongo-java-driver 启动 MongoClient 时出现 MongoSocketOpenException

file - JCAMP-DX 数据格式是什么?

java - 我应该如何在本地java应用程序中实现数据库