我如何阻止@Unrolled Spock tests显示为";“无根测试”;在EclipseJUnit视图中?

我如何阻止@Unrolled Spock tests显示为";“无根测试”;在EclipseJUnit视图中?,eclipse,groovy,junit,spock,junit-runner,Eclipse,Groovy,Junit,Spock,Junit Runner,一位同事最近在我们团队的项目中引入了Spock单元测试,我对它的Eclipse集成有一个恼人的问题:每当我们创建一个参数化测试并在其上使用@Unroll注释时,Eclipse JUnit视图就会失去与测试类的关联,并在“Unrooted Tests”下显示结果 例如,此测试类的结果: package test import spock.lang.Specification import spock.lang.Unroll class TestSpockTest extends Specifi

一位同事最近在我们团队的项目中引入了Spock单元测试,我对它的Eclipse集成有一个恼人的问题:每当我们创建一个参数化测试并在其上使用@Unroll注释时,Eclipse JUnit视图就会失去与测试类的关联,并在“Unrooted Tests”下显示结果

例如,此测试类的结果:

package test

import spock.lang.Specification
import spock.lang.Unroll

class TestSpockTest extends Specification {

    def "Not Unrolled Test"() {
        when: "something"
        then: "one equals one"
            1 == 1
    }

    @Unroll
    def "Unrolled Test #param"(Integer param) {
        when: "something"
        then: "a numer equals itself"
            param == param
        where:
            param << [1, 2, 3]
    }
}
包测试
导入spock.lang.Specification
导入spock.lang.Unroll
类TestSpockTest扩展了规范{
def“未展开测试”(){
什么时候:“某物”
然后:“一等于一”
1 == 1
}
@展开
def“展开测试参数”(整数参数){
什么时候:“某物”
然后:“一个数字等于它自己”
param==param
哪里:

param这是一个众所周知的问题,因为Spock无法(通过其JUnit facade)预先告诉Eclipse将运行多少个测试方法,以及它们的名称。(在数据驱动的测试中,这两个方面都是动态的。当不使用
@Unroll
时,向Eclipse预先报告的内容是相同的。当Eclipse将其与测试运行期间报告的内容相关联时,会感到困惑。)

斯波克方面,我想不出一个解决这个问题的好方法。我考虑过一些方法,比如在Eclipse内部运行时添加一些难看的启发式方法或执行两次测试,但没有一个是令人信服的。一个更理想的解决方案是改进Eclipse JUnit插件以更好地处理这种情况,这种情况在许多其他与JUnit兼容的测试框架

如果您无法接受当前输出,以下是您可以采取的一些步骤:

  • 在中提交改进请求,并要求上的每个人投票支持
  • 不要使用
    @Unroll
    (它只影响报告,而不影响执行。选择加入的一个原因是某些IDE有问题。)
  • 切换到IntelliJ IDEA,它提供了比Eclipse更好的Groovy、JUnit和Spock支持
  • 责怪你的同事介绍斯波克。:-)

您是否也在类级别而不是方法级别尝试了@Unroll?是的。不管@Unroll是在类级别还是方法级别,Eclipse JUnit视图仍然显示相同的内容。我看到了一个相关的问题。这可能是原因。Spock也遇到了该Eclipse错误(如果您使用空格),但即使我删除了测试名称中的空格,这些测试仍然显示为无根测试。我已为此提交了一份Eclipse错误报告:。如果您希望看到此问题得到修复,请投票支持。感谢您的回复。我决定向Eclipse项目提交一份错误报告:我打赌,如果OP责备他的同事,他最终会为他赞助一顿午餐关于引入Spock;)我建议用更一般的术语来表述改进请求(例如,“静态和运行时
说明
s不匹配时,测试树输出更好”),因为它不是针对斯波克的。你认为你可以自己在bug报告中添加一条评论,并附上详细信息吗?我对这方面了解不够,无法权威地衡量实际问题是什么,但你确实知道。