Maven Surefire Plugin+Spock 2:测试报告出现额外测试用例问题
解决Spock 2.x中@Unroll测试报告额外伞状用例的问题
嘿,这个坑我太熟了!你遇到的额外「测试用例」其实是Spock 2.x默认树形测试结构生成的父节点——Spock 2开始默认给数据驱动测试生成一个父节点来组织子用例(IDE里能看到清晰的树形结构),但Maven Surefire插件只认扁平的测试列表,就把这个父节点当成了一个独立的测试用例,不仅多出来一条冗余记录,还把父节点的耗时(其实就是所有子用例的总耗时)重复计算了,所以总耗时直接翻倍。
下面给你两种靠谱的解决方法,按需选择就行:
方法1:全局统一配置(推荐)
在你的项目src/test/resources目录下新建一个SpockConfig.groovy文件,把下面的配置放进去:
runner { // 关键配置:强制Spock生成扁平结构的测试报告 reportFlatTree true }
这个配置会让所有Spock测试都采用扁平模式输出结果,Surefire就不会把父节点当成独立测试用例了,属于一劳永逸的方案。
方法2:针对单个类/方法精准配置
如果不想全局修改,也可以用注解精准控制。Spock提供了@ReportFlatTree注解,你可以给整个测试类或者单个测试方法加上:
给测试类加(类下所有@Unroll方法都生效)
import spock.lang.ReportFlatTree import spock.lang.Specification import spock.lang.Unroll @ReportFlatTree class MyCalculationSpec extends Specification { @Unroll def "测试加法:#a + #b 应该等于 #expected"() { expect: a + b == expected where: a | b | expected 1 | 2 | 3 4 | 5 | 9 } }
给单个方法加
@Unroll @ReportFlatTree def "测试减法:#a - #b 应该等于 #expected"() { expect: a - b == expected where: a | b | expected 5 | 2 | 3 9 | 4 | 5 }
不管用哪种方式,核心都是让Spock停止生成树形结构的父节点,直接输出每个数据驱动的子用例,这样Surefire就能正确解析,额外的测试记录和翻倍的耗时问题就都解决啦!
内容的提问来源于stack exchange,提问作者mfol
相关产品推荐
相关产品推荐

