我们在
- gradle 版本 5.5
- android gralde 插件 3.5.0
我可以用
运行一部分测试./gradlew :app:testDebug --tests="*Fragment*" --tests="*Activity*"
但我想找到一种方法来做相反的事情,即不运行与这些选项匹配的测试,比如
./gradlew :app:testDebug --notTests="*Fragment*"--notTests="*Activity*"
有一个 excludeTests 选项 https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/TestFilter.html但我不能在 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 会认为它是一个任务,因为它没有被定义为任何任务中的标志
关于java - 我们如何排除一些单元测试在 Android 项目中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57796037/