如何在 JUnit 5 的参数化测试中传递预期值和实际值

How to pass expected and actual value in paramererized test in JUnit 5

我正在尝试实施参数化测试,其中我有一组输入值和预期值,我想使用 JUnitassertEquals 方法对其进行测试。 我正在为此使用 JUnit 版本 5.x 我正在将输入值传递到我在其他包(我正在测试)中定义的自定义方法,我正在检查它assertEquals 方法的预期值。

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.runners.Parameterized.Parameters;

class StringHelperTest {
    private StringHelper helper = new StringHelper();
    private String input;
    private String expectedOutput;

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

    public String getExpectedOutput() {
        return expectedOutput;
    }

    public void setExpectedOutput(String expectedOutput) {
        this.expectedOutput = expectedOutput;
    }

    @Parameters
    public static Collection<String[]> testConditions() {
        String[][] expectedOutputs = { { "AACD", "CD" }, { "ACD", "CD" }, { "CDEF", "CDEF" }, { "CDAA", "CDAA" } };
        return Arrays.asList(expectedOutputs);
    }

    @ParameterizedTest
    @Test
    public void truncateAInFirst2Positions_A_atStart() {
        assertEquals(expectedOutput, helper.truncateAInFirst2Positions(input));

    }
}

在方法 testConditions() 中,实际值和预期值作为 2 维字符串数组给出 expectedOutputs {{,}, {...}}.

如何将 expectedOutputs 数组传递给 truncateAInFirst2Positions_A_atStart() 方法以测试 expectedOutputs 数组

中提到的所有条件

对于 JUnit 5,您有 ParameterizedTest 和输入参数的 Source,它们是方法的简单参数。

所以你想要一个带有这个签名的方法:

@ParameterizedTest
//Source Annotation
void truncateAInFirst2Positions_A_atStart(String actual, String expected) {

现在您可以查找与您的用例匹配的来源。当你想用你的方法提供测试数据时,你可以使用 @MethodSource("testConditions")。注释中的 String 指向提供测试数据的静态方法。测试将执行 x 次,其中 x 是您集合中的对数。字符串数组中的元素将用作方法参数。

对于像字符串这样的简单类型,CSV 源可以更简单易读:

@CsvSource({
"AACD, CD",
"ACD, CD"
})

您可以在官方文档中查看所有可能的来源和可能性: https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests