我正在尝试实现参数化测试,其中我有一组输入值和期望值,我希望使用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()
方法中,实际值和预期值以二维字符串数组expectedOutputs
{{<actual_value>,<expected_value>},{...}}的形式给出。
如何将expectedOutputs
数组传递给truncateAInFirst2Positions_A_atStart()
方法,以测试expectedOutputs
数组中提到的所有条件
2条答案
按热度按时间qv7cva1a1#
在JUnit 5中,您有ParameterizedTest和一个用于输入参数的Source,这些参数就是方法的简单参数。
因此,您需要一个具有以下签名的方法:
现在,您可以查找用例匹配源。当您希望通过方法提供测试数据时,可以使用
@MethodSource("testConditions")
。注解中的String指向提供测试数据的静态方法。测试将执行x次,其中x是集合中的对的计数。String Array中的元素将用作方法参数。对于字符串这样的简单类型,CSV源可以更简单、更容易阅读:
您可以在官方文档中检查所有可能的来源和可能性:https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests
v64noz0r2#
因为问题已经回答过了,所以仅供参考,但如果您需要字符串以外的其他内容(例如您自己的对象),则可以使用
org.junit.jupiter.params.provider.Arguments.arguments
,例如:另请参阅:https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-sources-MethodSource