之前一直忽略单元测试,遇到问题的时候 (修改-运行-等待-操作-验证) 或者 (修改-debug-操作-验证),每次调试都是需要进行这么繁琐的步骤。因为一直没有去了解,去接触单元测试,干了这么久的开发,好像也习惯了,对这些也不厌其烦。也只能说是习惯了,但是难免碰到大姨夫的时候,心里一着急,也会有摔杯子的冲动。But 现在接触到了单元测试,改变命运的时候到了。
小创 这一系列关于单元测试的文章很全面:
- Android单元测试: 首先,从是什么开始
- Android单元测试(二):再来谈谈为什么
- Android单元测试(三):JUnit单元测试框架的使用
- Android单元测试(四):Mock以及Mockito的使用
- Android单元测试(五):依赖注入,将mock方便的用起来
- Android单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用
- 用Robolectric来做Android unit testing
现在流程的单元测试框架有很多:开源的Robolectric,谷歌的Espresso,Mockito
我今天一直在寻找一个问题的答案,这么多的框架,有什么区别,怎么去选择?
Robolectric :
通过实现一套JVM能运行的Android代码,然后在Junit test运行的时候去截取android相关的代码调用,然后转到他们的他们实现的代码去执行这个调用的过程。不用依赖真实的 Android 环境中运行(模拟器或者真机)
我感觉Robolectric主要用于前端,比如Activity,Fragment,一些页面操作的测试场景,采用Shadow的方式对Android中的组件进行模拟测试,从而实现Android单元测试。
Android robolectric 入门
Android单元测试框架Robolectric3.0的使用以及断言(AssertJ)的使用
Espresso:
功能和Robolectric 差不多,都可以测试UI,但是Espresso出自名门望族(Google),所以API文旦较多吧。
Espresso 4 Android Doc
Mock (Mockito)
Mock的概念,其实很简单,我们前面也介绍过:所谓的mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象,以达到两大目的:
- 验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等
- 指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作
要使用Mock,一般需要用到mock框架,Mockito框架是Java界使用最广泛的一个mock框架。
Android单元测试(四):Mock以及Mockito的使用
Android单元测试-Mockito的使用
整体的测试架构可以参考 Android-CleanArchitecture,这是谷歌官方出的关于 MVP架构的蓝图,里面的单元测试很全面
解读 Android-CleanArchitecture 可以参考Android官方MVP架构示例项目解析