2014-03-03 32 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特有的。 –