如何强制 gradle 在使用 junit 4 和 junit 5 的测试套件失败时继续构建

问题描述

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

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

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

解决方法

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

说...

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
    }
}