我不知道如何使用JUnit 5的@ValueSource
属性,例如Class<?>[]
类。
@ParameterizedTest
@ValueSource(classes = { })
public void testWithValueSource3(UserInfo argument) {
assertTrue(argument.getName().equals("Alice"));
}
我怎么在这里写?
“类= {}”
答案 0 :(得分:1)
JUnit 5 User Guide显示了将@ValueSource
与int
参数一起使用的示例。
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testWithValueSource(int argument) {
assertTrue(argument > 0 && argument < 4);
}
您将对classes
元素执行相同的操作,除了使用int
参数代替使用Class<?>
参数。请注意,您可能可以使用Class<? extends SomeType>
作为参数类型,但是没有类型安全性(即您必须确保注释仅使用该类型的类)。
@ParameterizedTest
@ValueSource(classes = { Object.class, String.class, List.class })
void testWithValueSource(Class<?> argument) {
// assert something...
}
但是,在您的问题中,您的测试方法接受UserInfo
参数(实例,而不是其类),该参数无法使用@ValueSource
进行配置。 @MethodSource
可能是您要使用的(请参阅user guide)。
@ParameterizedTest
@MethodSource("userInfoProvider")
void testUserInfo(UserInfo argument) {
// assert something...
}
/*
* Doesn't necessarily have to be static or return a Stream. Read
* the documentation to know when the method must be static and
* what other return types are possible.
*/
static Stream<UserInfo> userInfoProvider() {
return Stream.of(
new UserInfo(...),
new UserInfo(...),
new UserInfo(...),
// and so on...
);
}