【问题标题】:How to force gradle continue build on failure of a test suite with junit 4 and junit 5如何强制 gradle 在使用 junit 4 和 junit 5 的测试套件失败的情况下继续构建
【发布时间】:2021-04-13 15:43:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: gradle junit junit4 junit5


    【解决方案1】:

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

    也就是说……

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

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

    两者都可能有点过于宽泛。根据您的构建脚本,您可以为数据库测试添加一个单独的测试目标,然后仅在其中添加 ignoreFailures

    如果您想在 JUnit 中处理此问题,您可以查看the Assume class,如果某个条件已给出(或未给出),您可以跳过测试:

    import static org.junit.Assume.*;
    
    public class SomeDatabaseTest {
        @Test
        public void someThing() {
            assumeTrue(Database.isAvailable());
            // actual test goes here
        }
    }
    

    【讨论】:

    • 好吧,我在 2 个站点上运行测试...一个使用该 Oracle,一个没有它...我使用 H2 数据库测试其他场景...但是有一些特定的 Oracle 测试...
    • “如果在失败时忽略它,测试的意义何在?” — 也许在构建的后续步骤中会出现更多错误,我想先处理这些后来的错误。 — 也许我想在下周的错误中工作 — 也许我想知道总共有多少错误,这样我就可以大致了解我离完成还有多远。 — 很多人想要继续构建的原因。
    • @Martin 没错。对于 OP 的情况,数据库可靠可用会更好(Oracle 很难)。然而,对于一般问题,能够获得错误/测试失败的完整列表在进行大规模工作时通常很重要,例如。比较分支或整合主要变化。
    【解决方案2】:

    将此代码块添加到您的模块或项目级别的 build.gradle 文件中:

    project.gradle.teskGraph.whenReady {
        connectedDebugAndroidTest {
            ignoreFailures = true
        }
    }
    

    您可以使用任何测试任务来代替 connectedDebugAndroidTest。你也可以只为那些被注释的测试指定@Test。请参阅此处的 Android 文档,例如 tests

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      相关资源
      最近更新 更多