如何阻止@Unrolled Spock测试在Eclipse Junit View中显示为“Unrooted Tests”?

时间:2014-03-03 23:30:09

标签: 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 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 tests annotated with @Unroll display under "Unrooted Tests"

如何将展开的测试用例(例如“展开的测试1”)显示在“test.TestSockTest”下,如“未展开的测试”?我的Spock测试是否有一些Eclipse JUnit插件可以理解的命名约定?

我正在使用:

  • Eclipse Kepler SR1
  • 斯波克核-0.7-常规-2.0
  • Jspresso Spock Plugin 2.71
  • Groovy-Eclipse插件2.8
  • JUnit 4.8.2

1 个答案:

答案 0 :(得分:8)

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

我想不出在Spock方面解决这个问题的好方法。我已经考虑过在Eclipse内部运行时添加一些丑陋的启发式或执行两次测试的方法,但是没有一个能让人信服。更理想的解决方案是改进Eclipse JUnit插件以更好地处理这种情况,这种情况也可能出现在许多其他JUnit兼容的测试框架中。

如果您无法使用当前输出,请执行以下步骤:

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