我有一个maven项目,它有一些基于Selenium的集成测试,可以在名为sit的包中运行。我已将故障安全插件配置为在包中包含测试文件,例如。 <include>sit/**/*Test.java</include>
。
我正在尝试运行mvn clean install
并且当它启动测试时我注意到它实际上没有运行maven-war-plugin,即在运行测试之前没有将它打包成战争。但是,如果我运行mvn clean install -Dmaven.test.skip=true
,那么它确实成功打包了战争。 (我也有货运插件配置为部署战争,这是我注意到有一个问题,因为它未能部署一个不存在的战争)
我的pom的结构类似于下面的
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>a</groupId>
<artifactId>a</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<includes>
<include>sit/**/*Test.java</include>
</includes>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
为什么在没有设置-Dmaven.test.skip=true
的情况下没有运行war插件的任何想法?
在两种情况下都会创建类文件
答案 0 :(得分:2)
尝试将集成测试的测试类重命名为*IT.java
后缀(或前缀...),因为这是maven-failsafe-plugin
运行测试的约定。
*Test.java
是另一种按maven-surefire-plugin
运行测试的惯例。
所以不需要排除它们,只需将其重命名即可。
答案 1 :(得分:1)
好吧,似乎问题是maven-surefire试图将集成测试作为单元测试运行,因此我们必须明确地将集成测试排除在surefires单元测试之外
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
...
<configuration>
<excludes>
<exclude>sit/**/*Test.java</exclude>
</excludes>
</configuration>
</plugin>