为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2023-07-13 15:53:27
我们在等级版本 5.5android gralde 插件 3.5.0我可以运行测试的子集./gradlew :app:testDebug --tests="*Fragment*" --tests="*Activity*"但我想找到一种方法来进行相反的操作,即不运行与这些选项匹配的测试,例如./gradlew :app:testDebug --notTests="*Fragment*" --notTests="*Activity*"有一个 exceptTests 选项但我不能在 android 项目中使用它们,这些是纯 java 选项。一些背景:在我们的 CI 中,我们发现单元测试存在内存问题,并且我们怀疑 roboelectric,因此我们正在尝试单独的纯单元测试与 roboelectric 测试,以尝试隔离问题或针对作业应用特定修复。
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

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


用注释你的测试类


@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 会认为它是一个任务,因为它没有在任何任务中定义为标志


查看完整回答
反对 回复 2023-07-13
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信