【问题标题】:What is mean Class<?>[] classes and Please give me some example什么是 Class<?>[] 类,请给我一些例子
【发布时间】:2019-10-29 05:51:29
【问题描述】:

不知道如何使用JUnit 5的@ValueSource的属性如Class&lt;?&gt;[]类。

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"));
}

这里怎么写?

“类 = { }”

【问题讨论】:

  • 请举个例子
  • 是一个类数组
  • 你见过user guide吗?
  • 是的。我看到了。但是我不知道如何编写类的代码。
  • 我知道这是一个类数组。你能给我一些关于如何写那部分的提示吗?

标签: java junit5


【解决方案1】:

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

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testWithValueSource(int argument) {
    assertTrue(argument > 0 && argument < 4);
}

除了使用 int 参数而不是 Class&lt;?&gt; 参数之外,您可以对 classes 元素执行相同的操作。请注意,您可能可以使用 Class&lt;? extends SomeType&gt; 作为参数类型,但没有类型安全性(即 必须确保注释仅使用该类型的类)。

@ParameterizedTest
@ValueSource(classes = { Object.class, String.class, List.class })
void testWithValueSource(Class<?> argument) {
    // assert something...
}

但是,在您的问题中,您的测试方法接受无法使用 @ValueSource 配置的 UserInfo 参数(一个实例,而不是其类)。 @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...
    );
}

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 2010-12-03
    • 2017-05-08
    • 2019-06-04
    • 2015-06-08
    • 2014-06-22
    • 2016-04-02
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多