我有一个带有结构的多模块maven项目
parent
pom.xml
module
pom.xml
core-api
pom.xml
integ-tests
pom.xml
我有maven surefire插件设置,用于执行'core-api'模块中的单元测试'* Test.java'。
我们在一个单独的“整合测试”模块中进行了长时间运行的慢速集成测试。我们也使用'* Test.java'进行集成测试。
我们需要能够编译所有源代码,但希望排除'整合测试'作为默认maven'测试'阶段的一部分运行。我们计划使用配置文件来启用“集成测试”模块的测试阶段。我不想使用'failsafe'插件。
概述组合的矩阵在这里
mvn | core | integ-test
test | run unit tests | exclude
test -PintegTest | unit tests | integ tests
我在父pom中定义了surefire插件,其属性为'skip.integ.tests',将通过配置文件'-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>
在我的'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>
我的问题是在每种情况下运行的集成测试模块测试。关于我在设置方面出错的任何想法?
答案 0 :(得分:0)
首先,您应该根据旨在运行集成测试的naming conventions的maven-failsafe-plugin来命名集成测试。此外,预集成测试,集成测试和集成后测试 life cycle phases用于运行这些测试。这意味着在您的情况下,根据这样的文档配置maven-failsafe-plugin。 maven-failsafe-plugin绑定到集成测试生命周期阶段。
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.16</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
我建议将以下配置文件添加到您的集成测试模块中,如下所示:
<profiles>
<profile>
<id>run-its</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.16</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
这为您提供了以下选项:
mvn test
仅运行单元测试
mvn -DskipTests=true test
正在运行编译等但没有单元测试。
mvn -Prun-its verify
运行包装等单元测试和集成测试
mvn install
在没有集成测试的情况下运行安装。
mvn -DskipTests=true install
在不运行单元测试或集成测试的情况下运行安装。
答案 1 :(得分:0)
在Maven构建中,您可以排除:
-Dmaven.skip.test=true
-DskipTests
-DskipITs
相反,如果您在单独的Maven模块中进行集成测试(即在您的情况下进行集成测试),您可以通过配置文件直接将其从Maven构建中排除,如下例所示 - 请参阅聚合器的pom提取。要启动的xml和maven命令行:
<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 install -P !build-it