我尝试在JUnit 5中编写参数化测试
@ParameterizedTest
@ArgumentsSource(TwoParameters.class)
public void test(int a, int b){
//some assert
}
static class TwoParameters implements ArgumentsProvider {
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) throws Exception {
return Stream.of(
ObjectArrayArguments.create(1, 2),
ObjectArrayArguments.create(3, 4));
}
}
如您所见,有测试功能需要2个参数。我看到一个方法与@CsvSource
和我尝试使用上面的方法,但我不能返回流包含2个参数进行测试。
ObjectArrayArguments
无法解决。如何导入这个类?我尝试了import org.junit.jupiter.params.provider.ObjectArrayArguments;
但它不起作用(Intelij说'无法解析符号ObjectArrayArguments')
ObjectArrayArguments
不是JUnit的成员。
你需要提供一个Arguments
流。您可以使用工厂方法Arguments.of(Object...)
来创建此类实例:
return Stream.of(
Arguments.of(1, 2),
Arguments.of(3, 4)
);
有关详细信息,请阅读http://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests上的用户指南
以下是使用MethodSource
的摘录:
@ParameterizedTest
@MethodSource("stringIntAndListProvider")
void testWithMultiArgMethodSource(String str, int num, List<String> list) {
assertEquals(3, str.length());
assertTrue(num >=1 && num <=2);
assertEquals(2, list.size());
}
static Stream<Arguments> stringIntAndListProvider() {
return Stream.of(
Arguments.of("foo", 1, Arrays.asList("a", "b")),
Arguments.of("bar", 2, Arrays.asList("x", "y"))
);
}