ObjectArrayArguments类

问题描述 投票:1回答:1

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

java junit java-stream junit5
1个回答
3
投票

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"))
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.