2017-10-12 44 views
0

我想用三个参数来参数我JUnit5测试:stringstringlist<string>如何将列表作为JUnit5的参数化测试参数传递?

至今没有运气使用@CsvSource,这是通过params用于在我的用例的最方便的方式时:

的隐式转换到java.lang.String类型的对象转换为 类型的Java。 util.List

实际测试是:

@ParameterizedTest() 
@CsvSource(
    "2,1" 
) 
fun shouldGetDataBit(first: Int, second: String, third: List<String>) { 
    ... 
} 

这是可能的任何想法?我在这里使用Kotlin,但它应该是不相关的。

回答

3

没有理由使用破解通过StefanE的建议。

在这一点上,我非常确定Junit5测试参数不支持除原始类型和CsvSource之外的其他任何东西,只允许混合类型。

实际上,JUnit Jupiter支持任何类型的参数。这只是@CsvSource限于几种基本类型和String

因此而不是使用@CsvSource的,应该按如下步骤使用@MethodSource

@ParameterizedTest 
@MethodSource("generateData") 
void shouldGetDataBit(int first, String second, List<String> third) { 
    System.out.println(first); 
    System.out.println(second); 
    System.out.println(third); 
} 

static Stream<Arguments> generateData() { 
    return Stream.of(
     Arguments.of(1, "foo", Arrays.asList("a", "b", "c")), 
     Arguments.of(2, "bar", Arrays.asList("x", "y", "z")) 
    ); 
} 
+1

仅供参考:我更新了JUnit 5.1的用户指南以包含此类示例。 https://github.com/junit-team/junit5/commit/eb6e401fde681d7da649025391691ff5a45ca0f0 –

+0

产生的文档的变化是在最新的快照已经显现:http://junit.org/junit5/docs/snapshot/user-guide/#writing -tests参数化的测试来源,MethodSource –

1

提供第三元件作为逗号分隔的字符串和分割串入内部您测试列表。

在这一点上我敢肯定Junit5测试参数不支持什么比原始类型和其他仅CsvSource一个类型的,允许混合。

+0

好吧,我已经这样做了 - 只是希望东西少“哈克” –

+1

我只使用一个提供一个JSON字符串,而不是对灵活性的价值和没有黑客需要。测试参数功能仍处于测试阶段,希望对象的支持稍后会提供。 – StefanE

+0

供参考:不需要破解。详情请看我的答案。 –

相关问题