de.*_*.ru 2 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
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有某种转换器可以为我做这样的事情:
@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
}
}
Run Code Online (Sandbox Code Playgroud)
就是这样。
更新答案
由于木星的JUnit 5.2:是的,有专门ArgumentsAggregator和ArgumentsAccessor用于此目的的API完全相同。
请查看PersonAggregatorJUnit 用户指南中的示例以获取具体示例。
原答案
从 JUnit Jupiter 5.0 开始:不,目前没有开箱即用的转换器可以为您做到这一点。
原因:JUnit Jupiter 中的参数化测试支持不支持从多个参数映射到单个参数。因此,正如@Sormuras 所建议的那样,您可以打开一个问题来推荐它。
在执行实际转换方面,您可以考虑使用uniVocity-parsers,JUnit Jupiter 在内部使用它来解析 CSV 文件。uniVocity-parsers 还支持直接从 CSV 文件映射到beans,但要使用它,您需要实现自己的@TestTemplate读取 CSV 文件并执行映射。
其他选项包括来自Jackson 框架或来自JSefa 项目的 CSV 支持。
| 归档时间: |
|
| 查看次数: |
2580 次 |
| 最近记录: |