Android Studio 单元测试配置

Posted

技术标签:

【中文标题】Android Studio 单元测试配置【英文标题】:Android Studio Unit Testing Configuration 【发布时间】:2016-07-20 15:30:33 【问题描述】:

有没有办法从命令行运行 android 单元测试或配置?目前,“gradle test”运行单元测试测试工件中的所有测试,但这些测试失败并出现错误:“java.lang.IllegalStateException: 未注册仪器!必须在注册仪器下运行。”

我正在寻找一种方法来运行在 Android Studio 中右键单击 com.foo.android(test) 并按“在 'com.foo.android' 中运行测试”时运行的相同配置?我希望将其移至詹金斯。或者可以使用我在 AS 中手动创建的配置。

谢谢

[编辑] 如果我将纯 junit 单元测试和 Instrumentation 测试分离到它们各自的工件中,那么我将失去自己运行 UI 测试的能力,有没有办法解决这个问题?我有一个配置只运行 UITest 包,但不知道如何从命令行运行这个配置。

【问题讨论】:

您是否有仪器化测试(例如 Espresso 测试),或者只是纯 Java junit 测试? 两者混合,它们也不是全部分离出来的,有些在同一个类中 你是否在 build.gradle 中配置了testInstrumentationRunner testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 是目前的设置方式 【参考方案1】:

看看这些是否有助于从命令行运行 android 单元测试:

adb shell am instrument -w <package>/android.test.InstrumentationTestRunner

运行子包中的所有测试用例:

adb shell am instrument -w  <package>.<sub package>/android.test.InstrumentationTestRunner

从测试类运行单个测试用例:

adb shell am instrument -w -e class <project>.<test class>#testCase
<package>/android.test.InstrumentationTestRunner

【讨论】:

这适用于包,但是有没有办法运行配置,而不是单独指定每个包?如果没有,我可能只为 unitTests、InstrumentationTests 和 UITests 创建一个包。【参考方案2】:

我发现最好的方法是将我的所有 UITests 放在一个包中,当我只想运行单元测试时运行:

adb shell am instrument -w -e notPackage com.foo.android.UITest com.foo.android.test/android.support.test.runner.AndroidJUnitRunner

运行所有测试运行:

adb shell am instrument -w com.foo.android.test/android.support.test.runner.AndroidJUnitRunner

仅适用于 UITest:

adb shell am instrument -w -e package com.foo.android.UITest com.foo.android.test/android.support.test.runner.AndroidJUnitRunner

【讨论】:

以上是关于Android Studio 单元测试配置的主要内容,如果未能解决你的问题,请参考以下文章

在Android Studio进行“简单配置”单元测试(Android Junit)

在Android studio中进行单元测试和ui测试

Android Studio系列-单元测试入门篇

在 Android Studio 中运行所有单元测试

Android Studio导入现有单元测试“无法找到仪器信息”

Visual Studio 2017 中的 Xamarin (Android) 单元测试