一、Android单元测试介绍
Android项目开发,随着迭代速度提高,除了黑盒测试、集成测试外,非常需要更可靠的质量保障。单元测试周期性对项目进行函数级别的测试,在良好的覆盖率下,能够持续维护代码逻辑,一定程度保障代码质量。
与Java单元测试相同,Android单元测试也是维护代码逻辑的白盒工程,但由于Android运行环境的不同,Android单元测试的环境配置以及实施流程均有所不同。
在Java中,编写代码面对的只有类、对象、函数,编写单元测试时可以在测试工程中创建一个对象出来然后执行其函数进行测试,而在Android中,编写代码需要面对的是组件、控件、生命周期、异步任务、消息传递等,需要JUnit之外的框架支持。
二、基本单元测试框架
1、主流框架
Java单元测试框架:Junit、Mockito、Powermockito等;
Android单元测试框架:Robolectric、AndroidJUnitRunner、Espresso等。
Robolectric
Robolectric运行在jvm上,但是框架本身引入了android依赖库,它的设计思路便是通过实现一套JVM能运行的Android代码,从而做到脱离Android环境进行测试。Robolectric做android单元测试,运行速度比运行在真机or模拟器快。Robolectric也有局限性,例如不支持加载so。当然,robolectric可以配合junit、mockito使用。Robolectric仅支持API21及以下,并且不支持jni库。
Espresso
Espresso也是Google官方的android单元测试框架之一,在2013年的GTAC上首次提出,目的是让开发人员能够快速地写出简洁,美观,可靠的AndroidUI测试。很强大,测试代码非常简洁。Espresso本身运行在真机上,因此android任何代码都能运行,不像junit&mockito那样隔离依赖。缺点是,由于运行在真机,不能避免“慢”。
2、两种运行方式
在JVM中运行
在设备上运行
三、测试支持库
Android测试支持库提供了大量用于测试Android应用的框架:
(1).AndroidJUnitRunner:适用于Android且与JUnit4兼容的测试运行器;
(2).Espresso:UI测试框架;适合应用中的功能性UI测试;
(3).UIAutomator:UI测试框架;适合跨系统和已安装应用的跨应用功能性UI测试。
1、AndroidJUnitRunner
AndroidJUnitRunner类是一个JUnit测试运行器,可让您在Android设备上运行JUnit3或JUnit4样式测试类,包括使用Espresso和UIAutomator测试框架的设备。测试运行器可以将测试软件包和要测试的应用加载到设备、运行测试并报告测试结果。
2、Espresso
Espresso测试框架提供了一组API来构建UI测试,用于测试应用中的用户流。利用这些API,您可以编写简洁、运行可靠的自动化UI测试。Espresso非常适合编写白盒自动化测试。
Espresso测试框架的主要功能包括:
(1).灵活的API,用于目标应用中的视图和适配器匹配。
(2).一组丰富的操作API,用于自动化UI交互。
(3).UI线程同步,用于提升测试可靠性。
3、UI Automator
UI Automator测试框架提供了一组API来构建UI测试,用于在用户应用和系统应用中执行交互。利用UI Automator API,您可以执行在测试设备中打开“设置”菜单或应用启动器等操作。UI Automator测试框架非常适合编写黑盒自动化测试,其中的测试代码不依赖于目标应用的内部实现详情。
UI Automator 测试框架的主要功能包括: