2011-12-07 156 views
0

我已經看過其他一些SO問題,例如thisthis。但這些問題相當過時,如果存在新的解決方案,我很好奇。使用Maven從@Category運行測試

這裏是我的設置是什麼樣子:

類別接口:

public interface FastTest{} 

類別套房:

@RunWith(Categories.class) 
@IncludeCategory(FastTest.class) 
public class FastSuite{} 

樣品測試:

@Category(FastTest.class) 
public class FastTests{ 

    @Test public void assertOneFastTest(){} 

    @Test public void assertTwoFastTest(){} 
} 

使用Maven,讓我們說我只想ru n我所有的FastTest測試。理想情況下,我會用命令

mvn test -Dtest.category=FastTest 

mvn test -Dtest.suite=FastSuite 

但我一直沒能得到這個工作。除了使用ClasspathSuite之外,有沒有人有任何建議?謝謝。

回答

0

做了一些更多的研究,發現沒有選擇,所以我結束了使用ClasspathSuite。事實證明,這不是除了有什麼不同,你不能在一個類級別指定@Category,你必須標註顯示要分類

現在每一個方法,每個類別套件看起來是這樣的:

@RunWith(Categories.class) 
@Categories.IncludeCategory(FastTest.class) 
@Suite.SuiteClasses(AllTests.class) 
public class FastSuite{} 

您必須修改AllTests看起來像這樣:

@RunWith(ClasspathSuite.class) 
public class AllTests{} 

對於方法,它看起來像這樣:

public class FastTests{ 

    @Categories(FastTest.class) 
    public void assertOneFastTest(){} 

    @Categories(FastTest.class) 
    public void assertTwoFastTest(){} 
} 

使用Maven,您可以執行以下命令:

mvn test -Dtest=FastSuite -Dt3-chrome-path=%CHROME_DRIVER_HOME -Dwebdriver.chrome.driver=%CHROME_DRIVER_HOME 
2

您可以從萬無一失的插件做到這一點,利用團體的配置,但你需要指定junit47供應商也是如此。對我來說,以下工作:

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.11</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit47</artifactId> 
      <version>2.11</version> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
      <id>default-test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <groups>com.xxx.foo.CategoryClass</groups> 
    </configuration> 
</plugin> 

我認爲這是相當最近推出,所以可能無法在早期版本的插件,前期2.11的工作。您需要指定提供者,否則它不起作用。這些組應該是Category類的完全限定名。如果需要,也可以指定excludeGroups。

欲瞭解更多信息,請參閱Maven Surefire Plugin surefire:test

+0

很感謝關於junit提供商的提示!與所記載的相反,它應該已被自動選擇。但這顯然不是這種情況。 –

+0

@JanGoyvaerts重新:junit提供者,我已經提出了一個問題。它應該在2.12.1中修復,但我需要提供一個補丁:-) –

+0

我通過明確請求junit47提供程序來完成工作。我擔心故障安全有同樣的問題。 –