将带有集成测试的maven模块从测试阶段排除
我有一个带结构的多模块maven项目将带有集成测试的maven模块从测试阶段排除,maven,integration-testing,Maven,Integration Testing,我有一个带结构的多模块maven项目 parent pom.xml module pom.xml core-api pom.xml integ-tests pom.xml 我有maven surefire插件设置,用于执行单元测试“*Test.java”,它位于“核心api”模块中 我们在一个单独的“integ tests”模块中进行了长期运行缓慢的集成测试。我们也使用“*Test.java”进行整数测试 我们需要能够编译所有源代码,但希望排除作为默认maven
parent
pom.xml
module
pom.xml
core-api
pom.xml
integ-tests
pom.xml
我有maven surefire插件设置,用于执行单元测试“*Test.java”,它位于“核心api”模块中
我们在一个单独的“integ tests”模块中进行了长期运行缓慢的集成测试。我们也使用“*Test.java”进行整数测试
我们需要能够编译所有源代码,但希望排除作为默认maven“测试”阶段的一部分运行的“integ测试”。我们计划使用概要文件来启用“integ test”模块的测试阶段。我不想使用“故障保护”插件 这里有一个矩阵概述了组合
mvn | core | integ-test
test | run unit tests | exclude
test -PintegTest | unit tests | integ tests
我已经在我的父pom中定义了surefire插件,它具有一个属性“skip.integ.tests”,该属性将通过一个profile'-PintegTests'控制
<properties>
<skip.integ.tests>true</skip.integ.tests>
</properties>
..
<build>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</build>
..
<profiles>
<profile>
<id>integTests</id>
<properties>
<skip.integ.tests>false</skip.integ.tests>
</properties>
</profile>
</profiles>
真的
..
org.apache.maven.plugins
maven surefire插件
..
完整性测试
假的
在我的'integ test'pom中,我随后重写了'maven surefire plugin'配置,并设置了'skipTests'配置以查看属性的值
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>${skip.integ.tests}</skipTests>
</configuration>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
maven surefire插件
${skip.integ.tests}
我的问题是integ测试模块测试在任何情况下都会运行。关于我的设置哪里出了问题,你有什么想法吗?首先,你应该根据打算运行集成测试的名称来命名你的集成测试。此外,集成前测试、集成测试和集成后测试旨在运行这些测试。这意味着在您的情况下,要根据如下文档配置maven failsafe插件。maven故障保护插件进入集成测试生命周期阶段
[...]
org.apache.maven.plugins
maven故障保护插件
2.16
集成测试
验证
[...]
我建议将以下配置文件添加到集成测试模块中,如下所示:
运行
org.apache.maven.plugins
maven故障保护插件
2.16
集成测试
验证
这仅为您提供以下选项:
仅运行单元测试mvn测试
运行编译等,但没有单元测试mvn-DskipTests=true测试
运行封装等单元测试和集成测试mvn-删除其验证
在没有集成测试的情况下运行安装mvn安装
在不运行单元测试或集成测试的情况下运行安装mvn-DskipTests=true安装
- 通过添加
-Dmaven.skip.test=true
- 通过
-DskipTests
- 通过
-DskipITs
<modules>
<!-- remove 'integ-test' from this list -->
</modules>
<profiles>
<profile><id>build-it</id>
<activation><activeByDefault>true</activeByDefault></activation>
<modules><module>integ-test</module></modules>
</profile>
</profiles>
建造它
真的
积分检验
然后
mvn安装-p!构建它
谢谢,我确实听到了你的声音,但我明确表示,我不能将故障保护作为解决方案的一部分。我所处的情况是,我们有一些脆弱的集成测试,但我们不能允许集成测试无法阻止发布,因此我需要一些变通方法,在这种情况下,集成测试只在我确切地告诉您的特定环境中运行。如果激活了概要文件,则在运行集成测试的地方运行它的,否则它们不会运行。(参见mod it中的完整示例)。“我不想使用‘故障保护’插件。”。为什么不呢?它以一种更简单的方式做你想做的事情。只需将集成测试命名为FooITs,然后就可以使用-DskipITs来禁用它们。(或者,如果您坚持使用配置文件,请使用设置等效属性的配置文件)相关: