相关疑难解决方法(0)

如何在maven安装目标中跳过测试,同时在maven测试目标中运行它们?

我有一个多模块maven项目,在同一个文件夹(src/test/java)中集成了单元测试.集成测试标有@Category(IntegrationTest.class).我想最终得到以下设置:

  1. 如果我运行mvn install,我想要编译所有测试,但我不想执行任何测试.
  2. 如果我运行mvn test,我想要编译所有测试,但只执行单元测试.
  3. 如果我运行mvn integration-test,我想编译并执行所有测试.

重要的一点是,我希望在pom.xml没有任何额外命令行参数的情况下配置它.

目前我在我的父pom.xml中提出了以下设置,其中唯一的问题是#1,其中执行所有测试:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${project.java.version}</source>
                    <target>${project.java.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.14.1</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.14.1</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <includes>
                        <include>**/*.class</include>
                    </includes>
                    <excludedGroups>cz.cuni.xrg.intlib.commons.IntegrationTest</excludedGroups>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.14.1</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.14.1</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <groups>cz.cuni.xrg.intlib.commons.IntegrationTest</groups>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>**/*.class</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
Run Code Online (Sandbox Code Playgroud)

所有子模块在他们的pom.xml中都有以下插件配置,我认为它应该从父pom继承:

<build> …
Run Code Online (Sandbox Code Playgroud)

integration-testing maven maven-surefire-plugin maven-failsafe-plugin

56
推荐指数
5
解决办法
7万
查看次数

maven surefire 测试插件运行测试,即使它们被排除在外:

我排除了插件中的所有测试,除了我的测试套件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.11</version>
    <configuration>
        <!--
        <testFailureIgnore>true</testFailureIgnore>
        <skipTests>true</skipTests>
        -->
        <parallel>both</parallel>
        <threadCount>10</threadCount>
        <forkMode>once</forkMode>
        <configuration>
            <excludes>
                <exclude>**/Test*.java</exclude>
                <exclude>**/*Test.java</exclude>
                <exclude>**/*TestCase.java</exclude>
            </excludes>
            <includes>
                <include>ru.csbi.registry.CategorizedTestsSuite.java</include>
            </includes>
        </configuration>
        <!--
       <configuration>
           <groups>ru.csbi.registry.IntegrationTestsNotRequiringContainerCategory</groups>
           <groups>ru.csbi.registry.UnitTestsCategory</groups>
       </configuration>
        -->
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>2.12</version>
        </dependency>
    </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但是所有的测试都被执行了。

即使我删除了我在配置中唯一的包含它仍然运行所有测试:

<configuration>
    <excludes>
        <exclude>**/Test*.java</exclude>
        <exclude>**/*Test.java</exclude>
        <exclude>**/*TestCase.java</exclude>
    </excludes>
    <!--
   <includes>
       <include>ru.csbi.registry.CategorizedTestsSuite.java</include>
   </includes>
    -->
</configuration>
Run Code Online (Sandbox Code Playgroud)

这是日志:

-------------------------------------------------- ----- 测试 ------------------------------------- ----------- 并发配置为parallel='both', perCoreThreadCount=true, threadCount=10, useUnlimitedThreads=false

运行 javalangtests.AnnotationTest

测试运行:2,失败:0,错误:0,跳过:0,经过的时间:0 秒

运行 ru.csbi.registry.services.JdbcServiceTest

测试运行:1,失败:0,错误:0,跳过:0,经过的时间:0 秒

运行 ru.csbi.registry.services.reflection.ClassServiceTest

测试运行:2,失败:0,错误:0,跳过:0,经过的时间:0 秒

运行 ru.csbi.registry.services.reflection.FieldServiceTest …

unit-testing maven maven-surefire-plugin

4
推荐指数
1
解决办法
7041
查看次数