2013-07-17 68 views
1

我有一個Scala的功能2測試看起來如下:爲什麼在使用maven surefire運行時,surefire會忽略Scala specs2測試的測試類別?

import org.specs2.mutable.Specification 
import org.junit.runner.RunWith 
import org.junit.experimental.categories.Category 
import util.categories.NightlyTestCategory 
import org.specs2.runner.JUnitRunner 
import org.junit.Test 
import org.junit.runners.JUnit4 

@RunWith(classOf[JUnitRunner]) 
class MyTest extends Specification { 

    "My Test" should { 
    "succeed" in { 
     done 
    } 
    } 

} 

注意,上述試驗使用自定義轉輪JUnitRunner(從Specs2)來執行該測試。我使用Maven 3,以保持該項目,並已配置萬無一失,只包括標有NightlyTestCategory組測試:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.15</version> 
    <configuration> 
    ... 
     <groups>util.categories.NightlyTestCategory</groups> 

    </configuration> 
    </plugin> 

當我執行測試,我希望,因爲它不與類別註釋的Maven不運行上述測試NightlyTestCategory。但是,Maven會執行測試。奇怪的是,如果我把測試到與JUnit4亞軍執行定期JUnit測試,Maven將執行這個測試只有當我添加類別NightlyTestCategory:

@RunWith(classOf[JUnit4]) 
@Category(Array(classOf[NightlyTestCategory])) 
class MyTest extends Specification { 

    @Test 
    def test = println("Test") 

}  

對於我來說,好像使用自定義Specs2跑步者JUnitRunner以某種方式影響了surefire忽略組設置,並簡單地運行它找到的所有測試。我正在尋找一種解決方案,它允許我使用JUnitRunner運行specs2測試,但同時應該尊重該類別。

回答

3

specs2確實不知道有關Junit類別。在此期間解決方法是使用代碼:如果您添加

import org.specs2.specification.Tags 

@RunWith(classOf[JUnitRunner]) 
class MyTest extends Specification with Tags { section("NightlyTest") 

    "My Test" should { 
    "succeed" in { 
     done 
    } 
    } 
} 

然後,系統參數,只-Dspecs2.include=NightlyTest這個規範將被執行。然而這意味着你不能使用Surefire的 「groups」配置,你將不得不使用Maven配置文件。

另一種選擇是使用所有的JUnit/Maven的基礎設施和重複使用只specs2匹配器:

import org.specs2.matcher._ 

@RunWith(classOf[JUnit4]) 
@Category(Array(classOf[NightlyTestCategory])) 
class MyTest extends JUnitMatchers { 

    @Test 
    def test = { 1 must_== 1 } 

} 
+0

感謝澄清這一點。 – Valentin

相關問題