2011-12-07 106 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提供程序来完成工作。我担心故障安全有同样的问题。 –