【发布时间】:2021-04-13 15:43:28
【问题描述】:
我有一个项目,测试由 junit 4 和 5 实现。有些测试需要存在数据库,有什么方法可以标记这些特定测试(TestSuite 是答案吗?),所以 gradle 继续即使这些测试失败也要构建?
我不想跳过其他测试,只想跳过这些特定测试。
我使用的是 junit 5 年份,所以我的测试任务同时运行 junit 4 和 junit 5 测试。
【问题讨论】:
标签: gradle junit junit4 junit5
我有一个项目,测试由 junit 4 和 5 实现。有些测试需要存在数据库,有什么方法可以标记这些特定测试(TestSuite 是答案吗?),所以 gradle 继续即使这些测试失败也要构建?
我不想跳过其他测试,只想跳过这些特定测试。
我使用的是 junit 5 年份,所以我的测试任务同时运行 junit 4 和 junit 5 测试。
【问题讨论】:
标签: gradle junit junit4 junit5
老实说,我不会这样做。如果在失败时忽略它,那么测试的意义何在?您不妨立即删除测试。如果设置很慢,您不能延迟测试执行吗?
也就是说……
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
}
}
【讨论】:
将此代码块添加到您的模块或项目级别的 build.gradle 文件中:
project.gradle.teskGraph.whenReady {
connectedDebugAndroidTest {
ignoreFailures = true
}
}
您可以使用任何测试任务来代替 connectedDebugAndroidTest。你也可以只为那些被注释的测试指定@Test。请参阅此处的 Android 文档,例如 tests。
【讨论】: