使Maven运行所有测试,即使某些测试失败


243

我有一个包含多个模块的项目。当所有测试通过时,Maven测试将全部运行。

当第一个模块中的测试失败时,maven将不会继续进行下一个项目。我在Surefire设置中将testFailureIgnore设置为true,但这无济于事。

我如何使Maven运行所有测试?


什么版本的maven-surefire-plugin?
Pascal Thivent 2010年

Answers:


357

Maven Embedder文档中

-fae,之后--fail-at-end 才失败构建;允许所有未受影响的构建继续

-fn无论项目结果如何--fail-never 决不要使构建失败

因此,如果您要测试一个模块,则可以安全使用-fae

否则,如果您有多个模块,并且要对所有mvn clean install -fn模块都进行测试(甚至依赖于失败的测试模块的模块),则应运行
-fae将继续进行测试失败的模块(将运行所有其他测试),但是将忽略所有依赖该模块的模块。


1
另外,您可以为cmd添加-e以提供一些错误信息。
霸主2012年

10
我刚刚测试了该选项--fail-never。即使存在编译错误,Maven也不会使构建失败。如果我在Jenkins上使用此选项,则即使有很多编译错误,构建看起来也很成功。-Dmaven.test.failure.ignore=true在这种情况下,我更喜欢让Jenkins分析surefire报告。
fuemf5

@wlnirvana我现在使用此链接编辑了帖子(请随时删除您的评论...)
Steve Chambers

93

我刚刚找到了“ -fae”参数,该参数使Maven运行所有测试并且不会因失败而停止。


3
可悲的是,当我将其传递给TeamCity时,此参数不起作用。
ripper234 2010年

4
在多模块项目中,依赖于未通过测试的模块的模块将被跳过。使用-fn代替。
hipokito

2
@ ripper234您是否找到了使其在TeamCity上运行的方法?
Jeredriq Demas

86

您可以使用surefire 2.6进行测试,也可以使用来配置surefire吗testFailureIgnore=true?或在命令行上:

mvn install -Dmaven.test.failure.ignore=true

16
IIRC的效果是整个构建不会失败,而不是运行所有测试并最终失败。
Ondra参观Žižka

1
这是唯一对我有用的选项。“ -fae”选项对测试失败没有任何作用
Yoi

38

尝试在根项目的pom.xml中为surefire插件添加以下配置:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <testFailureIgnore>true</testFailureIgnore>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

17

快速解答:

mvn -fn test

与嵌套项目生成一起使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.