首先,您的问题既是一个 Spock 问题,也是一个 IntelliJ IDEA 问题,因为您想知道为什么参数化 Spock 2 测试在 IDEA 中看起来像这样。
其次,您发布的代码与您在 IntelliJ IDEA 中运行的代码不同。可能您的功能方法开始更像这样,以实现我们在您的屏幕截图中看到的测试迭代命名:
def "maximum of #a and #b is #c"() {
// ...
}
确定了这一点,接下来让我提醒你Spock 2.0 release notes的第一句话:
Spock 现在是基于 JUnit Platform 的测试引擎
这意味着与基于 JUnit 4 运行器的 Spock 1.x 相比,Spock 2.0 运行自己的 JUnit 测试引擎,即 Spock 引擎与 Jupiter 引擎处于同一级别,两者都在 JUnit 上运行平台。
JUnit 5 测试和 Spock 2 测试在 IDEA 中报告参数化测试的方式相同:
Test class A
- Test method x
- parametrised method name 0
- ...
- parametrised method name n
- Test method y
- parametrised method name 0
- ...
- parametrised method name n
Test class B
- Test method z
- parametrised method name 0
- ...
- parametrised method name n
...
IDEA 不是“报告额外的测试”,它只是在测试报告中添加了按方法名称分组的级别。
例如,如果您运行这个参数化的 JUnit 5 测试
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class NumbersTest {
@ParameterizedTest(name = "{0} is an odd number")
@ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers
void isOdd_ShouldReturnTrueForOddNumbers(int number) {
assertTrue(Numbers.isOdd(number));
}
public static class Numbers {
public static boolean isOdd(int number) {
return number % 2 != 0;
}
}
}
在 IDEA 中是这样的:
即,您对 JUnit 平台测试的预期。