如何在 JUnit 5 的参数化测试中传递预期值和实际值
How to pass expected and actual value in paramererized test in JUnit 5
我正在尝试实施参数化测试,其中我有一组输入值和预期值,我想使用 JUnit
的 assertEquals
方法对其进行测试。 我正在为此使用 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
我正在尝试实施参数化测试,其中我有一组输入值和预期值,我想使用 JUnit
的 assertEquals
方法对其进行测试。 我正在为此使用 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