JUnit 5 jupiter 中带有两个参数的参数化测试

rue*_*ste 16 java testing junit unit-testing junit5

如何在 JUnit 5 jupiter 中编写带有两个参数的参数化测试?以下不起作用(编译错误):

@ParameterizedTest
@ValueSource(strings = { "a", "b", "foo" })
@ValueSource(ints = { 1, 2, 3 })
public void test(String arg1, int arg2) {...}
Run Code Online (Sandbox Code Playgroud)

wum*_*mpz 34

这是实现这些多参数测试方法调用的两种可能性。

第一个 ( testParameters ) 使用CsvSource,您可以向其提供逗号分隔列表(分隔符是可配置的),并且类型转换会自动完成到您的测试方法参数。

第二个 ( testParametersFromMethod ) 使用一个方法 ( provideParameters ) 来提供所需的数据。

@ParameterizedTest
@CsvSource({"a,1", "b,2", "foo,3"})
public void testParameters(String name, int value) {
    System.out.println("csv data " + name + " value " + value);
}

@ParameterizedTest
@MethodSource("provideParameters")
public void testParametersFromMethod(String name, int value) {
    System.out.println("method data " + name + " value " + value);
}

private static Stream<Arguments> provideParameters() {
    return Stream.of(
            Arguments.of("a", 1),
            Arguments.of("b", 2),
            Arguments.of("foo", 3)
    );
}
Run Code Online (Sandbox Code Playgroud)

这些测试方法的输出是:

Running ParameterTest
csv data a value 1
csv data b value 2
csv data foo value 3
method data a value 1
method data b value 2
method data foo value 3
Run Code Online (Sandbox Code Playgroud)

  • 为此,方法方法将完成这项工作。在 ProvideParameters 中,您可以构建您想要的每种组合。 (3认同)