猿问

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

我们在

  • 等级版本 5.5

  • android gralde 插件 3.5.0

我可以运行测试的子集

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

但我想找到一种方法来进行相反的操作,即不运行与这些选项匹配的测试,例如

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

有一个 exceptTests 选项但我不能在 android 项目中使用它们,这些是纯 java 选项。

一些背景:在我们的 CI 中,我们发现单元测试存在内存问题,并且我们怀疑 roboelectric,因此我们正在尝试单独的纯单元测试与 roboelectric 测试,以尝试隔离问题或针对作业应用特定修复。


至尊宝的传说
浏览 104回答 1
1回答

牧羊人nacy

我知道这不是最好的解决方案,但我确实通过执行以下操作设法使其发挥作用。用注释你的测试类@Category(my.package.WhateverClass) // I personally used Robolectric将以下内容添加到您的根目录build.gradleif (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 会认为它是一个任务,因为它没有在任何任务中定义为标志
随时随地看视频慕课网APP

相关分类

Java
我要回答