如何强制 gradle 在 junit 4 和 junit 5 测试套件失败的情况下继续构建

Ami*_*deh 3 junit junit4 gradle junit5

我有一个项目,由 junit 4 和 5 实现测试。有些测试需要存在数据库,有什么方法可以标记这些特定测试(TestSuite 是答案吗?),所以 gradle 继续构建,即使那些测试失败了?

我不想跳过其他测试,而只想跳过这些特定测试。

我使用的是 junit 5 vintage,所以我的测试任务同时运行 junit 4 和 junit 5 测试。

Rob*_*ert 5

老实说,我不会这样做。如果测试失败时你忽略它,那么测试还有什么意义呢?您不妨立即删除该测试。如果设置很慢,就不能延迟测试执行吗?

那是说...

gradle --continue当任务失败时将继续执行,收集所有错误。您可能仍然需要忽略 Gradle 的退出代码(例如,在构建管道中)。

您还可以使用ignoreFailures测试属性来始终忽略失败的测试。

两者都可能有点太宽泛了。根据您的构建脚本,您可以为数据库测试添加一个单独的测试目标,并ignoreFailures仅添加到该目标。

如果你想在 JUnit 中处理这个问题,你可以查看Assume 类,它可以让你在给定(或未给定)特定条件时跳过测试:

import static org.junit.Assume.*;

public class SomeDatabaseTest {
    @Test
    public void someThing() {
        assumeTrue(Database.isAvailable());
        // actual test goes here
    }
}
Run Code Online (Sandbox Code Playgroud)

  • “如果测试失败时忽略它,那么测试的意义何在?”——也许在构建的后续步骤中会出现更多错误,我想首先解决这些后续错误。— 也许我想在下周解决错误 — 也许我想知道总共有多少个错误,这样我就可以了解距离完成还有多远。— 人们想要继续构建的原因有很多。 (4认同)
  • @马丁 没错。对于OP的情况,拥有可靠可用的数据库会更好(对于Oracle来说很难)。然而,对于一般问题,在进行更大规模的工作时,例如,能够获得错误/测试失败的完整列表通常很重要。比较分支或整合重大变更。 (3认同)