Java 在多模块maven项目中,如何在默认情况下跳过集成测试,但仍按需运行它们?
我有一个多模块项目,其结构如下:Java 在多模块maven项目中,如何在默认情况下跳过集成测试,但仍按需运行它们?,java,maven,maven-3,maven-failsafe-plugin,Java,Maven,Maven 3,Maven Failsafe Plugin,我有一个多模块项目,其结构如下: Project: - module1 - module2 - integration-test - parent pom 实现以下目标的正确方法是什么: 使用mvn clean install 按需运行集成测试(可以使用maven failsafe插件,也可以通过maven概要文件?) 集成测试失败时使构建失败 默认情况下,不应使用mvn clean install运行集成测试 集成测试模块只有集成测试 我尝试过使用maven failsa
Project:
- module1
- module2
- integration-test
- parent pom
实现以下目标的正确方法是什么:
- 使用
mvn clean install
- 按需运行集成测试(可以使用maven failsafe插件,也可以通过maven概要文件?)
- 集成测试失败时使构建失败李>
- 默认情况下,不应使用
mvn clean install运行集成测试
- 集成测试模块只有集成测试
<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>
org.codehaus.mojo
构建助手maven插件
1.12
添加集成测试源
生成测试源
添加测试源
src/test/java
添加集成测试资源
生成测试资源
添加测试资源
真的
src/测试/资源
运行
org.apache.maven.plugins
maven故障保护插件
集成测试
验证
目前,当我运行
mvn clean install
时,它也运行集成测试。当我运行mvn-Prun它的clean verify
时,它也在运行来自其他模块的单元测试。我缺少什么?我不知道这是否是最好的解决方案,但您可以使用配置文件来实现这一点。例如,在主pom.xml中,您只在
部分添加其他模块,然后添加另一个配置文件:
<modules>
... standard modules ...
</modules>
<profiles>
<profile>
<id>tests</id>
<modules>
<module>module1</module>
... standard modules repeated (it might not be needed>...
<module>module2</module>
<module>module-integration-test</module>
</modules>
</profile>
</profiles>
如果您想运行集成测试和其他模块,这将起作用。如果只想运行集成测试,可以这样做:
<modules>
<!-- EMPTY -->
</modules>
<profiles>
<profile>
<id>defaultModule</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>module1</module>
... standard modules repeated (it might not be needed>...
<module>module2</module>
</modules>
</profile>
<profile>
<id>tests</id>
<modules>
<module>module-integration-test</module>
</modules>
</profile>
</profiles>
默认模块
真的
模块1
... 标准模块重复(可能不需要>。。。
模块2
测验
模块集成测试
通过这种方式,使用mvn clean install,您将使用defaultModule(默认情况下为ActiveModule)运行,如果您指定-p测试,您将只运行测试,您只需在运行构建时设置
-DskipITs=true
即可跳过集成测试的执行:
mvn clean install -DskipITs=true
这将运行除ITs之外的所有其他测试(参见文档)
如果你只想跑步
mvn clean install
您可以在pom.xml中为Skippits设置默认值
<properties>
<skipITs>true</skipITs>
</properties>
要仅运行ITs而不运行Unittests,您可以像这样配置maven-surefire插件的-Property
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skip>${skipUnitTests}</skip>
</configuration>
</plugin>
请注意,默认情况下,skippunittes
将为false
,因此无需为此声明属性
如果你想使用一个配置文件,它应该是这样工作的
<profile>
<id>ITs</id>
<properties>
<skipUnitTests>true</skipUnitTests>
<skipITs>false</skipITs>
</properties>
</profile>
当然,您也可以直接在配置文件中使用带有true的maven-surefire-plugin
插件配置,这样就不需要额外的属性,比如
<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>
它的
假的
org.apache.maven.plugins
maven surefire插件
2.12.4
真的
最好是制作一个单独的模块,其中包含集成测试,您的问题中已经显示了这些测试。现在如何处理正在运行或未运行的集成测试
集成测试模块如下所示:
4.0.0
群居
集成测试
0.1.0-SNAPSHOT
集成测试
罐子
改装
groupId
艺术品
${project.version}
....
....
...
测试
运行
org.apache.maven.plugins
maven故障保护插件
集成测试
验证
通过使用此功能,您可以通过以下方式控制运行集成测试:
mvn -Prun-its clean verify
您必须定义与集成测试模块所需的其他模块的依赖关系,或者确保这些模块必须在此集成测试模块之前构建,这一点很重要
此外,您现在可以在此处配置集成测试所需的补充内容,例如在集成前测试
和/或集成后测试
阶段运行这些补充内容
如果您将测试代码放入src/test/java
中,并将可选资源放入src/test/resources
中,那么您现在可以在集成测试模块中独立于任何其他模块定义依赖项
当然,您应该在父pom中的pluginManagement中定义插件的版本,以进行de
<profile>
<id>ITs</id>
<properties>
<skipUnitTests>true</skipUnitTests>
<skipITs>false</skipITs>
</properties>
</profile>
mvn clean install -PITs
<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>
mvn -Prun-its clean verify