当前位置: 首页 > 知识库问答 >
问题:

使用Maven拆分单元和集成测试

傅兴平
2023-03-14

我正在Jenkins中设置一个CD管道,我想在两个不同的步骤中运行我的单元测试和集成测试。计划是让我的管道脚本看起来像这样,并让它们单独运行:

    stage('Unit tests') {
        steps {
            withMaven(maven: 'Maven 3.6.2') {
                sh 'mvn test -P coverage'
            }
        }
    }
    stage('Integration tests') {
        steps {
            withMaven(maven: 'Maven 3.6.2') {
                sh 'mvn test -P coverage'
            }
        }

我已尝试使用surefire插件,如下所述:https://dzone.com/articles/splitting-unit-and-integration-tests-using-maven-a,而运行“mvn测试”只运行单元测试,但“mvn集成测试”同时运行单元测试和集成测试。

我也尝试过使用这里描述的故障保护插件:Maven单独进行单元测试和集成测试,但是“mvn verify”运行单元测试和集成测试,不管我输入哪个选项。

如何让我的管道在两个不同的步骤中执行单元测试和集成测试?

Pom与肯定:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId> <!-- surefire plugin version managed by Spring Boot -->
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
            <executions>
                <execution>
                    <id>unit-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skipTests>false</skipTests>
                        <includes>
                            <include>**/*Test.java</include>
                        </includes>
                    </configuration>
                </execution>
                <execution>
                    <id>integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skipTests>false</skipTests>
                        <includes>
                            <include>**/*IT.*</include>
                            <include>**/*Tests.*</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>

具有surefire和故障保护功能的Pom:

            <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.19.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.19.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>${surefire.skip}</skip>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

共有1个答案

申屠鹏
2023-03-14

这就给我解决了:

下面是示例pom.xml它可以使用以下命令:

>

  • mvn清洁验证-DskipUTs=true:只运行集成测试(测试以IT结尾)
  • mvn清洁验证-DskipITs=true:仅运行单元测试(测试以测试结束)
  • mvn清洁验证-DskipTest=true:跳过所有测试

    <build>
    <finalName>test-app</finalName>
    <plugins>
    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId> <!-- surefire plugin version managed by Spring Boot -->
            <configuration>
                <skipTests>${skipUTs}</skipTests>
            </configuration>
        </plugin>
    
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>3.0.0-M3</version>
            <executions>
                <execution>
                    <id>run-integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>
            </configuration>
        </plugin>
    
    </plugins>
    </build>
    

  •  类似资料:
    • 我有个关于Maven的问题。 我有文件名以*Test结尾的单元测试和文件名以*IT结尾的集成测试。 我的理解是,surefire将运行单元测试,故障保险将运行集成测试。 当我运行:mvn清洁安装 同时运行单元测试和集成测试。 当我跑步时: mvn验证 这两个测试也会运行。 我是否可以配置maven,以便在使用:mvn clean install时,只运行单元测试。当我使用mvn验证时,是否只运行集

    • 单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet

    • 在我认为是彻底的谷歌搜索后,我只能找到一种方法来做这件事与声纳。有没有更简单的方法可以做到这一点? 相关问题:Maven分离单元测试和集成测试

    • 本文向大家介绍单元测试和集成测试之间的区别,包括了单元测试和集成测试之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,测试是任何应用程序或软件交付过程中最重要的阶段,因为测试不仅可以验证应用程序的质量,还可以为开发人员提供改进其产品的机会。 每个应用程序都以某种高级或低级语言进行开发,这意味着已经为其开发编写了一些代码,因此在要测试的模块的基础上,存在测试的分类,即单元测试和集成测试。

    • Current Test Status Aggregated Failures Test Grid 单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的 package # 单个 package make test WHAT=./pkg/api # 多个 packages make test WHAT=./pkg/{api

    • 在以前的一个项目中,我使用Spock测试框架对Java代码进行单元测试。我发现这非常有效,所以我尝试将Spock测试添加到我当前的项目中,该项目使用Maven作为构建工具(前一个项目使用Gradle)。虽然我可以让Maven编译我的Spock测试(使用),但我无法让Maven运行这些测试。 我做了一个简单的例子来演示我在两个文件中的问题: null 当我执行(或)时,我希望运行单个单元测试并失败。