gpt4 book ai didi

java - 如何默认跳过集成测试,但仍然在多模块 Maven 项目中按需运行它们?

转载 作者:行者123 更新时间:2023-12-03 00:59:31 24 4
gpt4 key购买 nike

我有一个具有以下结构的多模块项目:

Project:    
- module1
- module2
- integration-test
- parent pom

实现以下目标的正确方法是什么:

  • 使用mvn clean install从所有模块(集成测试除外)运行单元测试
  • 按需运行集成测试(可以使用 maven-failsafe 插件或通过 maven 配置文件?)
  • 当集成测试失败时,构建失败。
  • 默认情况下,不应使用 mvn clean install 运行集成测试
  • 集成测试模块仅包含集成测试。

我已经尝试使用 maven-failsafe 插件和 maven-sunfire-plugin(用于单元测试)进行多次黑客攻击,但无法以标准方式实现上述目标。

以下是集成测试 pom 的相关部分:

<dependencies>
<!-- dependencies required for this module-->

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>add-integration-test-sources</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/test/java</source>
</sources>
</configuration>
</execution>
<execution>
<id>add-integration-test-resources</id>
<phase>generate-test-resources</phase>
<goals>
<goal>add-test-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/test/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

<profiles>
<profile>
<id>run-its</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>

目前,当我运行mvn clean install时,它也会运行集成测试。当我运行 mvn -Prun-its clean verify 时,它也从其他模块运行单元测试。我错过了什么?

最佳答案

您只需在运行构建时设置 -DskipITs=true 即可跳过集成测试的执行,如下所示:

mvn clean install -DskipITs=true

这将运行除您的 IT 之外的所有其他测试(有关文档,请参阅 here)。

如果你只想运行

mvn clean install

您可以在 pom.xml 中设置skipITs的默认值

<properties>
<skipITs>true</skipITs>
</properties>

这样您就可以根据需要覆盖它

mvn clean install -DskipITs=false

要仅运行没有单元测试的 IT,您可以像这样配置 maven-surefire-plugin 的 -Property

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skip>${skipUnitTests}</skip>
</configuration>
</plugin>

所以如果你运行

mvn clean install -DskipITs=false -DskipUnitTests=true

请注意,skipUnitTests 默认情况下将为 false,因此无需为此声明属性。

如果您更愿意使用配置文件,它应该像这样工作

    <profile>
<id>ITs</id>
<properties>
<skipUnitTests>true</skipUnitTests>
<skipITs>false</skipITs>
</properties>
</profile>

并像这样运行构建

mvn clean install -PITs

当然,您也可以直接在配置文件中将 maven-surefire-plugin 的插件配置与 true 一起使用,这样就不需要额外的属性,例如

<profile>
<id>ITs</id>
<properties>
<skipITs>false</skipITs>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>

关于java - 如何默认跳过集成测试,但仍然在多模块 Maven 项目中按需运行它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49572531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com