2

我正在尝试使用 JUnit 5 编写一个测试,该测试应该测试某些参数的多种组合。本质上,我想测试一些来自不同来源的输入的笛卡尔积。考虑以下测试:

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
class CartesianProductTest {

    @ParameterizedTest
    @CsvFileSource(resources = { "values.csv" })
    void testIt(int input, int expected, int otherParameter) {
        assertEquals(expected, methodUnderTest(input, otherParameter));
    }
}

现在的问题是,我只有inputandexpected并且应该测试一些固定值,这些固定值values.csv总是返回所有这些值的预期值。不知何故,我必须提供我的 CSV 中所有值的笛卡尔积,并且所有值都可以采用。我查看了https://stackoverflow.com/a/57648088/7962200但这需要硬编码我的所有测试用例或手动读取 CSV 以提供值流。我想到了更多类似的东西otherParametermethodUnderTest()otherParameter

import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.CsvFileSource;
class CartesianProductTest {

    @ParameterizedTest
    @MethodSource
    void testIt(int input, int expected, int otherParameter) {
        assertEquals(expected, methodUnderTest(input, otherParameter));
    }

    static Stream<Arguments> testIt() {
         return csvValues().flatMap(csv ->
             otherParams().map(otherParam -> Arguments.of(csv, otherParam)));
    }

    @CsvFileSource(resources = { "values.csv" })
    static Stream<Arguments> csvValues() {/* get somehow from Annotation */}
    @CsvFileSource(resources = { "otherparam.csv" })
    static Stream<Arguments> otherParams() {/* get somehow from Annotation */}
}
4

0 回答 0