Android 测试总结

Android Studio 以简化测试为设计宗旨。 您只需完成几次点击,便可建立一个在本地 JVM 上运行的 JUnit 测试,或建立一个在设备上运行的仪器测试。

当然,您也可以通过集成测试框架来扩展测试能力,例如可以集成 Mockito 在本地单元测试中测试 Android API 调用,以及集成 EspressoUI Automator 在仪器测试中演练用户交互。

您可以利用 Espresso 测试记录器自动生成 Espresso 测试。
此页面提供的基本信息介绍了如何在 Android Studio 中新增和运行测试。
如需更完整的测试编写方法指南,请参阅测试入门指南

测试类型和位置

测试代码的位置取决于您要编写的测试的类型。 Android Studio 为以下两种测试类型提供了源代码目录(源集):

本地单元测试

位于 module-name/src/test/java/。

这些测试在计算机的本地 Java 虚拟机 (JVM) 上运行。 当您的测试没有 Android 框架依赖项或当您可以模拟 Android 框架依赖项时,可以利用这些测试来尽量缩短执行时间。

在运行时,这些测试的执行对象是去掉了所有 final 修饰符的修改版 android.jar。 这样一来,您就可以使用 Mockito 之类的常见模拟库。

仪器测试

位于 module-name/src/androidTest/java/。

这些测试在硬件设备或模拟器上运行。 这些测试有权访问 Instrumentation API,让您可以获取某些信息(例如您要测试的应用的 Context), 并且允许您通过测试代码来控制受测应用。 可以在编写集成和功能 UI 测试来自动化用户交互时,或者在测试具有模拟对象无法满足的 Android 依赖项时使用这些测试。

由于仪器测试内置于 APK 中(与您的应用 APK 分离),因此它们必须拥有自己的 AndroidManifest.xml 文件。 不过,由于 Gradle 会自动在构建时生成该文件,因此它在您的项目源集中不可见。 您可以在必要时(例如需要为 minSdkVersion 指定其他值或注册测试专用的运行侦听器时)添加自己的清单文件。 构建应用时,Gradle 会将多个清单文件合并成一个清单。

Gradle 构建解读这些测试源集的方式与其解读项目应用源集的方式相同,您可以利用这一点根据构建变体创建测试。

当您新建项目或添加应用模块时,Android Studio 会创建以上所列的测试源集,并在每个源集中加入一个示例测试文件。

您可以在 Project 窗口中看到它们,如图 1 所示。


图 1. 您的项目的 (1) 仪器测试和 (2) 本地 JVM 测试在 Project

添加一个新测试

要创建一个本地单元测试或仪器测试,您可以按照以下步骤新建针对特定类或方法的测试:
1> 打开包含您想测试的代码的 Java 文件。
2> 点击您想测试的类或方法,然后按 Ctrl+Shift+T (⇧⌘T)。
3> 在出现的菜单中,点击 Create New Test。
4> 在 Create Test 对话框中,编辑任何字段并选择任何要生成的方法,然后点击 OK。
5> 在 Choose Destination Directory 对话框中,点击与您想创建的测试类型对应的源集:androidTest 对应于仪器测试,test 对应于本地单元测试。
然后点击 OK。

您也可以按如下所述在相应测试源集中创建一个通用 Java 文件:
1> 在左侧的 Project 窗口中,点击下拉菜单并选择 Project 视图。
2> 展开相应的模块文件夹和嵌套的 src 文件夹。 要添加本地单元测试,请展开 test 文件夹和嵌套的 java 文件夹;要添加仪器测试,请展开 androidTest 文件夹和嵌套的 java 文件夹。
3> 右键点击 Java 软件包目录并选择 New > Java Class。
4> 命名文件,然后点击 OK。
此外,请务必在应用模块的 build.gradle 文件中指定测试库依赖项:

dependencies {
    // Required for local unit tests (JUnit 4 framework)
    testCompile 'junit:junit:4.12'

    // Required for instrumented tests
    androidTestCompile 'com.android.support:support-annotations:24.0.0'
    androidTestCompile 'com.android.support.test:runner:0.5'
}

如需了解其他可选内容库依赖项以及有关如何编写测试的详细信息,请参阅构建本地单元测试构建仪器单元测试

创建适用于构建变体的仪器测试

如果您的项目包括的构建变体 具有唯一的源集,则您可能需要相应的仪器测试源集。

在源集中创建与您的构建变体对应的仪器测试有助于保持测试代码的条理性,也便于您只运行适用于给定构建变体的测试。

要添加适用于您的构建变体的测试源集,请执行以下步骤:
1> 在左侧的 Project 窗口中,点击下拉菜单并选择 Project 视图。
2> 在相应模块文件夹内,右键点击 src 文件夹,然后点击 New > Directory。
3> 输入“androidTestVariantName”作为目录名称。例如,如果您的构建变体名为“MyFlavor”,则目录名称应为“androidTestMyFlavor”。然后点击 OK。
4> 右键点击新目录,然后点击 New > Directory。
5> 输入“java”作为目录名称,然后点击 OK。
现在您就可以按照以上新增测试的步骤向这个新源集添加测试了。 当您到达 Choose Destination Directory 对话框时,选择新的变体测试源集。

src/androidTest/ 源集中的仪器测试由所有构建变体共享。 构建适用于应用的“MyFlavor”变体的测试 APK 时,Gradle 会将 src/androidTest/ 和 src/androidTestMyFlavor/ 这两个源集合并。

例如,下表显示的就是仪器测试文件所在源集路径与应用代码源集路径的对应关系。

应用类的路径 对应仪器测试类的路径
src/main/java/Foo.java src/androidTest/java/AndroidFooTest.java
src/myFlavor/java/Foo.java src/androidTestMyFlavor/java/AndroidFooTest.java

Gradle 构建会合并和替换来自不同测试源集的文件,这与它对应用源集的处理方法完全相同。 在本例中,“androidTestMyFlavor”源集中的 AndroidFooTest.java 文件会替换“androidTest”源集中的版本。

如需了解有关源集合并方法的详细信息,请参阅配置构建

您应该为应用和测试源集使用构建变体的另一个原因是,通过模拟依赖项创建封闭测试。 也就是说,您可以为应用创建一个包含依赖项模拟实现(例如惯常不稳定的网络请求或设备传感器数据)的产品风味,然后添加一个对应的模拟测试源集。

如需了解详细信息,请参阅有关利用产品风味进行封闭测试 的博文。

运行测试

要运行测试,请执行如下操作:
1> 点击工具栏中的 Sync Project ,确保您的项目已与 Gradle 同步。
2> 以下列其中一种方式运行测试:
a> 在 Project 窗口中,右键点击测试,然后点击 Run
b> 在代码编辑器中,右键点击测试文件中的某个类或方法,然后点击 Run 来测试该类中的所有方法。
c> 要运行所有测试,右键点击测试目录,然后点击 Run tests 。
默认情况下,您的测试运行时使用的是 Android Studio 默认的运行配置。 如果您想更改某些运行设置(例如仪器运行器和部署选项),可以在 Run/Debug Configurations 对话框中编辑运行配置(点击 Run > Edit Configurations)。

更改测试构建类型

默认情况下,所有测试均针对Debug构建类型运行。 您可以利用模块级 build.gradle 文件中的 testBuildType 属性将其更改为其他构建类型。

例如,如果您想针对“staging”构建类型运行测试,请按下面这段代码中所示对该文件进行编辑。

android {
    ...
    testBuildType "staging"
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,115评论 8 72
  • Android测试总结 [TOC] 简介 最近整理了Android测试方便的只是,主要涉及代码测试和自动化测试。 ...
    流水不腐小夏阅读 1,114评论 1 9
  • 参考 中文官网构建指南:https://developer.android.google.cn/studio/bu...
    FinalSky阅读 5,307评论 0 16