作者:ZeusL
团队:腾讯移动品质中心TMQ
一、单元测试及Android单元测试简介
惯例,先简单介绍下理论知识,懂得的可以跳过。
1、单元测试定义和特性
单测定义:
在计算机编程中,单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
单测特性:
截取下《单元测试的艺术》一书中的优秀的单元测试特性,牢记!
2、Android单元测试
顾名思义,是在Android系统下进行的单元测试。
业界上已经有很多工具可以支持做Android系统下的单元测试,主要分为两大类:
(1)Instrumentation
通过Android系统的Instrumentation测试框架,我们可以编写测试代码,并且打包成APK,运行在Android手机上。
优点: 逼真;
缺点: 很慢;
代表框架:Junit,Espresso。
(2)Junit / Mock
通过Junit,以及第三方测试框架,我们可以编写测试代码,生成class文件,直接运行在JVM虚拟机中。
优点: 很快,使用简单,方便;
缺点: 不够逼真,比如有些硬件相关的问题,无法通过这些测试出来;
代表框架: Junit,Robolectric, Mockito, Powermock。
Robolectric:一个单元测试框架,可以清除Android SDK(通过shadow技术),以便您可以测试驱动Android应用程序的开发,测试JVM内部运行,用例执行速度很快。
其官网地址:http://Robolectric.org/。
Espresso:一种简洁,美观,可靠的Android UI测试框架。
其API地址:https://developer.Android.com/reference/Android/support/test/Espresso/Espresso.html。
Mockito:一个针对 Java 的单元测试模拟框架,它与 EasyMock 和 jMock 很相似,都是为了简化单元测试过程中测试上下文 ( 或者称之为测试驱动函数以及桩函数 ) 的搭建而开发的工具。
其中文开发文档:http://www.devtf.cn/?p=1315。
Powermock:是在 EasyMock 以及 Mockito 基础上的扩展,通过定制类加载器等技术,实现了之前提到的所有Mockito不能模拟的功能,比如静态函数、构造函数、私有函数、Final 函数以及系统函数的模拟。
二、Google官方MVP架构
在熟悉单元测试框架前,首先需要学习了下Google官方推荐Android的MVP项目架构,好的框架单元测试也比较好开展。
其推荐的项目中MVP各层所使用的单元测试框架如下图所示:
其MVP测试架构图总结如下:
项目代码有兴趣学习的同学可以去自行下载去学习,学习这种优秀代码是最快的方式。
View层:
职责:MVP模式下