什么是Class <?> []类,请给我一些示例

时间:2019-06-14 15:00:55

标签: java junit5

我不知道如何使用JUnit 5的@ValueSource属性,例如Class<?>[]类。

https://junit.org/junit5/docs/current/api/org/junit/jupiter/params/provider/ValueSource.html#classes()

@ParameterizedTest
@ValueSource(classes = { })
public void testWithValueSource3(UserInfo argument) {
    assertTrue(argument.getName().equals("Alice"));
}

我怎么在这里写?

  
    

“类= {}”

  

1 个答案:

答案 0 :(得分:1)

JUnit 5 User Guide显示了将@ValueSourceint参数一起使用的示例。

@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...
    );
}