如何在 Maven 中按类别运行 JUnit 测试?

使用JUnit 4.8和新的注释,有没有办法选择一个类别子集来运行Maven的Surefire插件?@Category

例如,我有:

@Test
public void a() {
}

@Category(SlowTests.class)
@Test
public void b() {
}

我想运行所有非慢速测试,如:(请注意,-Dtest.categories是由我编造的...)。

mvn test -Dtest.categories=!SlowTests // run non-slow tests
mvn test -Dtest.categories=SlowTests // run only slow tests
mvn test -Dtest.categories=SlowTests,FastTests // run only slow tests and fast tests
mvn test // run all tests, including non-categorized

所以关键是我不想创建测试套件(Maven只是拿起项目中的所有单元测试,这非常方便),我希望Maven能够按类别选择测试。我想我刚刚编造了-Dtest.categories,所以我想知道是否有类似的工具可以使用?


答案 1

Maven已经更新,可以使用类别。

Surefire文档中的一个例子:

<plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.11</version>
      <configuration>
        <groups>com.mycompany.SlowTests</groups>
      </configuration>
</plugin>

这将运行任何带有注释的类@Category(com.mycompany.SlowTests.class)


答案 2

基于这篇博客文章 - 并简化 - 将其添加到您的pom.xml:

<profiles>
    <profile>
        <id>SlowTests</id>
        <properties>
            <testcase.groups>com.example.SlowTests</testcase.groups>
        </properties>
    </profile>
    <profile>
        <id>FastTests</id>
        <properties>
            <testcase.groups>com.example.FastTests</testcase.groups>
        </properties>
    </profile>
</profiles>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.13</version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>2.13</version>
                </dependency>
            </dependencies>
            <configuration>
                <groups>${testcase.groups}</groups>
            </configuration>
        </plugin>
    </plugins>
</build>

然后在命令行

mvn install -P SlowTests
mvn install -P FastTests
mvn install -P FastTests,SlowTests

推荐