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

标签 java android android-gradle-plugin

我们在

  • 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/

相关文章:

android - 如何将这个(AdsWizz)Kotlin回调函数包装在协程中?

android - 如何通过新版本的撰写导航传递 parcelable 参数?

java - 如何在 log4j2 中以编程方式更改 Appender 布局?

c# - 在 Ant 中使用 csc 任务构建时出现问题

android - 使用 TextInputLayout 和 TextInputEditText 时删除多余的空间/填充/边距

android - React Native Camera 导致 gradle 构建错误

android - 在 Jenkins 的任务 gradle 中找不到 assembleRelease

c++ - 如何为某些构建变体禁用 Android NDK 构建

java - 有什么方法可以设置集合的最大大小?

Java、Float.parseFloat()、System.out.printf()不一致