我正在为Maven构建添加集成测试。我想实现以下目标:
任务变得更加复杂,因为这是一个现有的应用程序,它具有混乱的maven模块结构(层次结构)。我会试着解释一下。
所以我有一个看起来像
的聚合器pom(超级pom)<groupId>com.group.id</groupId>
<artifactId>app-name</artifactId>
<modules>
<module>SpringBootApp1</module>
<module>SpringBootApp2</module>
</modules>
<packaging>pom</packaging>
<profiles>
<profile>
<id>Local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Only unit tests are run when the development profile is active -->
<skip.integration.tests>true</skip.integration.tests>
<skip.unit.tests>false</skip.unit.tests>
</properties>
</profile>
<profile>
<id>Test</id>
<properties>
<!-- Only integration tests are run when the test profile is active -->
<skip.integration.tests>false</skip.integration.tests>
<skip.unit.tests>true</skip.unit.tests>
</properties>
</profile>
</profiles>
和一些不从super pom继承的模块poms(它们继承自spring-boot-starter-parent
)看起来像
<groupId>com.group.id</groupId>
<artifactId>spring-boot-app</artifactId>
<packaging>jar</packaging>
<name>Spring Boot app</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<build>
<finalName>SpringBootApp1</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<skipTests>${skip.unit.tests}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.21.0</version>
<executions>
<!-- Invokes both the integration-test and the verify goals of the Failsafe Maven plugin -->
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<skipTests>${skip.integration.tests}</skipTests>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
如您所见,我在聚合器pom中定义了skip.integration.tests
和skip.unit.tests
属性(不同配置文件的属性值不同),并尝试在模块poms中使用它们。
当我执行mvn clean test -P Test
或mvn clean verify -P Test
运行测试时,我发现未应用属性(例如,虽然skip.unit.tests
为true
,但仍会执行单元测试)。
我可以将聚合器pom声明为模块pom的父级,也许它可以解决问题,但是模块poms已经将spring-boot-starter-parent声明为其父级。
ps。我向您保证我遵守命名约定:单元测试的名称类似于*Test.java
,集成测试的名称类似于*IT.java
。因此,maven-failsafe-plugin和maven-surefire-plugin可以区分它们。
答案 0 :(得分:0)
如果您可以将聚合器作为模块的父级,而不是将聚合器配置为将spring-boot-starter-parent
作为父级,则此问题将得到解决。(假设您的聚合器当前没有任何父级)。
或者您可以从命令行传递skip test属性,例如-Dskip.unit.tests=true
(您调用mvn clean verify)。
作为旁注,当您执行mvn test
命令时,您不必指定要跳过的集成测试,因为它在生命周期的后期。(它不会以任何方式执行)