大家好,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 开始:是,有专用的 ArgumentsAggregator
和 ArgumentsAccessor
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/