使用Maven从@Category运行测试

时间:2011-12-07 19:24:27

标签: java maven junit categories maven-surefire-plugin

我查看过其他一些问题,例如thisthis。但是这些问题已经过时了,我很好奇是否存在新的解决方案。

以下是我的设置:

类别界面:

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,假设我只想运行所有FastTest测试。理想情况下,我会使用命令

mvn test -Dtest.category=FastTest

mvn test -Dtest.suite=FastSuite

但我无法让这个工作。除了使用ClasspathSuite之外,有没有人有任何建议?感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用组的配置从surefire插件执行此操作,但您还需要指定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

答案 1 :(得分: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