如何在Gradle Android中运行单个仪器测试

36

我试图使用这一行来运行测试......但是这会启动所有的测试:

./gradlew -DconnectedAndroidTest.single=LandingActivityTests connectedAndroidTest

我该如何启动单个测试?


这个回答解决了你的问题吗?使用Gradle运行特定的仪器化单元测试 - tir38
4个回答

52

从Android Gradle插件版本1.3.0开始,您可以使用

./gradlew -Pandroid.testInstrumentationRunnerArguments.class=your.package.LandingActivityTests connectedAndroidTest

Gradle具有“-D”选项,可以指定系统属性,这些属性会传递给JVM。这让我想到,只使用gradlew shell命令就可以完成基于JVM的测试。是否有人知道在哪里查找有关测试仪器或单元测试的属性信息? - Shigerello
1
OP正在询问connectedAndroidTest,即在设备/模拟器上运行的测试。在JVM中运行的单元测试是一个不同的话题。话虽如此,您可能想查看http://tools.android.com/tech-docs/unit-testing-support上的“从Gradle运行”部分。 - sschuberth
2
考虑到当前情况,这是最好的答案。 - mdelolmo
1
我希望这个回答能够被采纳。我经常来这个页面复制粘贴这一行代码。如果它在页面顶部会更方便。 - Jameson
最近的Android Gradle插件版本中,这个还有效吗?我无法在AGP 8.0.2中让它工作:在根项目“Root”及其子项目中找不到任务'.testInstrumentationRunnerArguments.class=com.company.app.SourceTest'。 - undefined

22

1
为了我的仪器测试,我不得不将“runner_class”参数替换为com.example.test/android.test.InstrumentationTestRunner。 - Peter Tran

13

如果您想在类中仅运行一个测试,请执行以下操作:

./gradlew -Pandroid.testInstrumentationRunnerArguments.class=my.app.package.register.RegisterEmailTest#can_register connectedAndroidTest

can_registerRegisterEmailTest 类中的一个方法。

注意:包需要引用类所在的位置,否则它将无法工作。


2
对我来说它没有工作是因为modules,但是如果你想在特定的module中运行特定的TestClass,那么你可以使用:$ ./gradlew -Pandroid.testInstrumentationRunnerArguments.class=com.blah.blah.MyActivityTest <modulename>:connectedAndroidTest - Wahib Ul Haq
绝对比接受的答案简单!请参阅https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.ProductFlavor.html#com.android.build.gradle.internal.dsl.ProductFlavor:testInstrumentationRunnerArguments获取更多信息。 - Tim Kist
它将运行类中的所有测试方法。#methodName 部分会被忽略。 - eastwater

3

访问Testing
遗憾的是,gradle connectedAndroidTest任务不支持所有参数。
Gradle团队有一个功能请求
如果您正在使用Android Studio,可以创建运行配置,通过adb shell am instrument启动特定测试。


针对基于JVM的测试怎么办? - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接