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

时间:2017-05-12 17:26:52

标签: maven junit

我有以下测试:

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

单元测试没有标记类别。

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

我希望默认情况下为集成测试运行所有测试EXCEPT。 但是,如果配置文件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配置文件,则根本不运行任何测试。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为这是因为你包含和排除,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>
</profiles>