maven - JUnit - 仅当特定配置文件处于事件状态时才在类别中运行测试

标签 maven junit

我有以下测试:

FirstUnitTest.java
SecondUnitTest.java
FirstIntegrationTest.java
SecondIntegrationTest.java

单元测试没有用类别标记。

两个集成测试都标有 @Category(IntegrationTests.class) .

默认情况下,我希望运行除集成测试之外的所有测试。
但是,如果个人资料 integration-tests-only处于事件状态,我只想运行集成测试。

我天真地认为以下配置可以使这项工作:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludedGroups>com.example.IntegrationTests</excludedGroups>
            </configuration>
        </plugin>
    </plugins>
</build>
<profiles>
    <profile>
        <id>integration-tests-only</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <groups>com.example.IntegrationTests</groups>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

但是在没有配置文件的情况下运行测试时完全符合我的要求 - 如果我激活 integration-tests-only 只运行单元测试profile 根本没有运行测试。

任何想法我做错了什么?

最佳答案

我假设发生这种情况是因为您包含和排除,并且 Maven 合并配置并解析为不运行任何内容。

考虑重新编写配置(没有运行它,所以可能有一些小问题):

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <executions>
                <execution>
                    <id>default-test</id>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </execution>
                <execution>
                    <id>unit-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skipUnitTests}</skip>
                        <excludedGroups>com.example.IntegrationTests</excludedGroups>
                    </configuration>
                </execution>
                <execution>
                    <id>integ-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skipIntegTests}</skip>
                        <groups>com.example.IntegrationTests</groups>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<profiles>
    <profile>
        <id>no-tests</id>
        <properties>
            <skipTests>true</skipTests>
        </properties>
    </profile>
    <profile>
        <id>unit-tests</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <skipUnitTests>false</skipUnitTests>
            <skipIntegTests>true</skipIntegTests>
        </properties>
    </profile>
    <profile>
        <id>integ-tests</id>
        <properties>
            <skipUnitTests>true</skipUnitTests>
            <skipIntegTests>false</skipIntegTests>
        </properties>
    </profile>
</profiles>

关于maven - JUnit - 仅当特定配置文件处于事件状态时才在类别中运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943357/

相关文章:

maven - IntelliJ 可以像 Eclipse 一样显示可搜索的 Maven 依赖项吗?

java - 线程 "main"java.lang.Error : Unresolved compilation problem: LocalConverter cannot be resolved 中出现异常

java - Gwt Maven 多模块。如何配置依赖项以将请求工厂代理放入共享模块中?

java - 如何测试嵌套包中的代码

java - 从 maven 但不是从 Intellij 执行时测试失败

junit - 如何从程序停止flink流作业

Java servlet 无法接收大文件

java - 如何更改karaf功能的URL :install

java - JUnit测试用@SpringApplicationConfiguration自动启动Job

maven - 在添加 Hibernate 元模型类后在 Maven 模块中使用 IntelliJ 时,JUnit 测试失败并出现 Java 错误