ObjectArrayArguments class

ObjectArrayArguments class

我尝试在 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));

    }
}

如您所见,有一个带有两个参数的测试函数。 我看到了一种方法 @CsvSource 和这个 我尝试使用上面的方法,但我不能 return 流包含 2 个参数用于测试。

ObjectArrayArguments 无法解析。 如何导入这个class? 我试过 import org.junit.jupiter.params.provider.ObjectArrayArguments; 但它不起作用(Intellij 说 'Cannot resolve symbol 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"))
    );
}