JUnit 5/Maven/保险火:跳过(或强制)选定的慢速单元测试

jdzmm42g  于 2022-11-11  发布在  Maven
关注(0)|答案(1)|浏览(185)

我有一个Maven项目,使用JUnit 5maven surefire插件2.22.2
当我执行mvn clean installmvn test时,我希望跳过一些特定的测试--它们要么特别慢,要么需要其他服务(=集成测试)。
所以,我这样进行:

import org.junit.jupiter.api.Tag;

public class ExampleTest {
    @Test
    public void testSomethingRegular() {
        // ...
    }

    @Test
    @Tag("IntegrationTest")
    public void testDatabaseAccess() {
        // ...
    }
}

pom.xml中,我添加以下内容:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
        <excludedGroups>IntegrationTest</excludedGroups>
    </configuration>
</plugin>

...

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.9.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.9.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

总的来说,这很好用。我喜欢这个改变不是侵入性的--它不强迫我用@Tag("fast")来标记每个“快速”单元测试,而且我不需要添加/激活任何新的Maven配置文件。
不过,我有两个问题:
1.在测试执行之后,我看到了Tests run: 1, Failures: 0, Errors: 0, Skipped: 0testDatabaseAccess是否可能被算作Skipped,而不是被忽略?
1.如何强制按需执行testDatabaseAccess?我试过mvn test -DincludedGroups=IntegrationTest -DexcludedGroups=aaa,但它不起作用...

lkaoscv7

lkaoscv71#

回答问题2-这可以使用Maven配置文件来实现:

<properties>
    <project.tests.exclude>IntegrationTest</project.tests.exclude>
</properties>

...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
        <excludedGroups>${project.tests.exclude}</excludedGroups>
    </configuration>
</plugin>

...

<profiles>
    <profile>
        <id>allTests</id>
        <properties>
            <project.tests.exclude></project.tests.exclude>
        </properties>  
    </profile>
</profiles>

默认情况下,执行mvn clean install将跳过标记为IntegrationTest的单元测试,而执行mvn clean install -PallTests将强制运行所有测试。并且不需要在.m2目录或其他任何地方声明allTests配置文件。

相关问题