如何在JUnit 4和JUnit 5测试套件失败时强制Gradle继续构建

3

我有一个项目,其中使用junit 4和5实现了测试。其中一些测试需要存在数据库,有没有办法标记这些特定的测试(是TestSuite的答案?),以便gradle即使这些测试失败也可以继续构建?

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

我正在使用junit 5 vintage,因此我的测试任务同时运行junit 4和junit 5测试。

2个回答

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

好的,我在两个网站上运行测试...一个使用Oracle,另一个不使用...我使用H2数据库测试其他场景...但有一些特定的Oracle测试... - Amir Pashazadeh
4
“如果测试失败时被忽略,那测试的意义在哪里?”——也许后面的构建步骤中有更多错误,我想先处理那些较晚的错误。——也许我想在下周处理这个错误。——也许我想知道总共有多少错误,这样我就可以了解我离完成还有多远。——有很多原因,让人想要继续构建。 - Martin
3
@Martin 确切。对于OP的情况,DB能够可靠地使用会更好(使用Oracle很困难)。然而对于一般性问题,当进行较大规模的工作,例如比较分支或集成主要更改时,能够获得完整的错误/测试失败列表通常很重要。 - Thomas W

0
将以下代码块添加到您的模块或项目级 build.gradle 文件中:
project.gradle.teskGraph.whenReady {
    connectedDebugAndroidTest {
        ignoreFailures = true
    }
}

你可以使用任何测试任务来代替connectedDebugAndroidTest。你也可以仅为那些被标注为@Test的测试指定@Test。请参阅此处的Android文档以获取测试示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接