问题:相同的测试方法用于不同的数据。根据输入数据,测试方法主体应该期望等于'或者'不等于'断言。
研究:@ParameterizedTest
允许使用@CsvSource
作为测试方法输入数据:
@ParameterizedTest
@CsvSource({ "foo, 1", "bar, 2", "'baz, qux', 3" })
void testWithCsvSource(String first, int second) {
assertNotNull(first);
assertNotEquals(0, second);
}
这可以通过两种相反的测试方法来实现,但它们的代码将非常相似。
问题:如何在方法体中识别当前使用哪组CsvSource输入参数?
答案 0 :(得分:1)
您可以使用不同的CsvSource
创建两个测试方法,然后委托一个常用的测试方法。
@ParameterizedTest
@CsvSource({ "foo, 1", "bar, 2", "'baz, qux', 3" })
void testWithCsvSource(String first, int second) {
internalTest(first, second);
}
@ParameterizedTest
@CsvSource({ "foo2, 1", "bar2, 2", "'baz2, qux2', 3" })
void testWithCsvSource2(String first, int second) {
internalTest(first, second);
}
private void internalTest(String first, int second) {
assertNotNull(first);
assertNotEquals(0, second);
}
答案 1 :(得分:0)
到目前为止,最佳解决方案是将index作为每个集合的第一个参数:
@ParameterizedTest
@CsvSource({
"0, foo, 11", // Expected to be valid.
"1, bar, 22", // Expected to be invalid.
"2, 'baz, qux', 33" }) // Expected to be invalid.
void testWithCsvSource(
int parametersIndex,
String first,
int second) {
Assertions.assertEquals(
second.validate(),
parametersIndex == 0); // Expected true for 0 index parameters only.
}