ChatGPT解决这个技术问题 Extra ChatGPT

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

我有一个包含多个模块的项目。当所有测试都通过时,Maven 测试会运行它们。

当第一个模块中的测试失败时,maven 将不会继续下一个项目。我在 Surefire 设置中将 testFailureIgnore 设置为 true,但它没有帮助。

无论早期失败如何,如何让 Maven 运行所有测试?

什么版本的 maven-surefire-plugin?
testFailureIgnore 应该可以工作,也许做一个 mvn help:effective-pom 以确保它在正确的位置......

r
rogerdpack

Maven Embedder documentation

-fae,--fail-at-end 仅在之后使构建失败;允许所有未受影响的构建继续 -fn,--fail-never 永远不要使构建失败,无论项目结果如何

因此,如果您正在测试 one 模块,那么使用 -fae 是安全的。

否则,如果您有多个模块,并且如果您希望对所有模块进行测试(即使是依赖于失败测试模块的模块),您应该运行 mvn clean install -fn
-fae 将继续测试失败的模块(将运行所有其他测试),但将跳过所有依赖它的模块。


此外,您可以为 cmd 添加 -e 以提供一些错误信息。
我刚刚测试了选项 --fail-never。即使有编译错误,Maven 也不会失败。如果我在 Jenkins 上使用这个选项,即使它有很多编译错误,构建看起来也是成功的。在这种情况下,我更喜欢 -Dmaven.test.failure.ignore=true 并让 Jenkins 分析万无一失的报告。
@wlnirvana 我现在用这个链接编辑了这篇文章(所以随时删除你的评论......)
你可以在pom文件中配置这个吗?
@BluE 根据 the list of tags 似乎并非如此。也许有一种方法可以直接在 pom.xml? 中指定 -fae
S
Sylhare

我刚刚找到了 -fae 参数,它会导致 Maven 运行所有测试并且不会在失败时停止。


可悲的是,当我将它传递给 TeamCity 时,这个参数不起作用。
在多模块项目中,依赖于未通过测试的模块的模块将被跳过。请改用 -fn。
@ripper234 你找到了让它在 TeamCity 上运行的方法吗?
你可以在pom文件中配置这个吗?
这仅适用于不依赖于同一构建树中的其他模块的模块,请参阅 stackoverflow.com/a/12616700/32453
r
rogerdpack

使用 <testFailureIgnore>true</testFailureIgnore> 配置 Surefire

或者在命令行上:

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

IIRC 这具有整个构建没有失败的效果,而不是运行所有测试并最终失败。
这是唯一对我有用的选项......“-fae”选项对测试失败没有任何作用
是的,如果您只有单元测试失败,这将使整个构建“看起来”成功通过。 --fail-at-end or -fae 应该让它继续并在最后使构建失败,尽管它也会跳过依赖模块,请参阅 stackoverflow.com/a/12616700/32453
这个选项的好处是您可以在 NetBeans IDE 中为 Maven 的“全局执行选项”下指定它,这在您无法修改每个模块的 POM 时非常棒(我正在处理一个包含 198 个模块的项目) .
n
nybon

尝试在根项目的 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>

正如其他回复中所解释的,这将执行所有测试,但即使存在失败,也会将构建标记为成功
r
rustyx

快速回答:

mvn -fn test

适用于嵌套项目构建。