2014-03-03 30 views
2

一位同事最近在我们团队的项目中引入了Spock单元测试,并且我的Eclipse集成遇到了一个恼人的问题:无论何时我们创建参数化测试并在其上使用@Unroll注释,Eclipse JUnit视图都会失去关联与测试类并在“无根测试”下显示结果。如何停止@Unrolled Spock测试在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”下面显示“Not Unrolled Test”?我的Spock测试是否存在Eclipse JUnit插件可以理解的命名约定?

我使用:

  • Eclipse的开普勒SR1
  • 斯波克核-0.7-常规-2.0
  • Jspresso斯波克插件2.71
  • Groovy的Eclipse插件2.8
  • 的JUnit 4.8 .2
+0

你还试过@Unroll在班级而不是方法? – dmahapatro

+0

是的。不管是@Unroll是处于类还是方法级别,Eclipse JUnit视图仍然显示相同的内容。 –

+0

我看到一个相关的[日食中的bug](https://bugs.eclipse.org/bugs/show_bug.cgi?id=343129)。可能是这是原因。 – dmahapatro

回答

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。 :-)
+0

感谢您的回复。我决定向Eclipse项目提交一个错误报告:https://bugs.eclipse.org/bugs/show_bug.cgi?id=429606 –

+0

我敢打赌,OP最终会为他的同事赞助午餐,如果他指责介绍斯波克。 ;) – dmahapatro

+0

我建议用更一般的术语来形成改进请求(例如,“当静态和运行时描述不匹配时,更好的测试树输出”),因为它不是Spock特有的。 –