我们如何从 Android 项目中排除某些单元测试



我们在

  • 格拉德尔版本 5.5
  • 安卓格拉尔德插件 3.5.0

我可以运行测试的子集

./gradlew :app:testDebug --tests="*Fragment*" --tests="*Activity*"

但是我想找到一种方法来做相反的事情,即不运行与这些选项匹配的测试,比如

./gradlew :app:testDebug --notTests="*Fragment*" --notTests="*Activity*"

https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/TestFilter.html 有一个 excludeTests 选项,但我不能在 android 项目中使用这些选项,这些是纯 java 选项。

一些上下文:在我们的 CI 上,我们看到单元测试的内存问题,我们怀疑是机器人电测试,因此我们正在尝试将纯单元测试与机器人电测试分开,以尝试隔离问题或为作业应用特定修复程序。

我知道这不是最好的解决方案,但我确实设法通过执行以下操作使其工作。

注释您的测试类

@Category(my.package.WhateverClass) // I personally used Robolectric

将以下内容添加到根build.gradle

if (project.gradle.startParameter?.taskRequests?.args[0]?.remove("--robolectric")) {
subprojects
.all {
it.tasks
.withType(Test)
.configureEach {
println "Configuring task $it.name"
useJUnit {
includeCategories 'my.package.WhateverClass'
}
}
}
} else if (project.gradle.startParameter?.taskRequests?.args[0]?.remove("--unit")) {
subprojects
.all {
it.tasks
.withType(Test)
.configureEach {
println "Configuring task $it.name"
useJUnit {
excludeCategories 'my.package.WhateverClass'
}
}
}
}

以 身份运行测试./gradlew project:testDebug --robolectric./gradlew project:testDebug --unit

如果您不添加任何内容,它将默认运行所有测试

如果你有更多的时间,你可能会创建一个任务,从测试扩展并添加相同的配置。

注意:之所以.remove('--robolectric')存在,是因为 Gradle 会认为这是一个任务,因为它在任何任务中都没有定义为标志

最新更新