Android单元测试学习笔记

在网上找到一份写得挺不错的Android单元测试的详细教程,作者是小创,在SegmentFault他的主页可以看到他写的文章,不过目测这些文章也是从他的个人主页同步过来的。我已阅读的篇章如下:
Android 单元测试: 首先,从是什么开始
Android单元测试(二):再来谈谈为什么
Android单元测试(三):JUnit单元测试框架的使用
Android单元测试(四):Mock以及Mockito的使用
Android单元测试(五):依赖注入,将mock方便的用起来
Android单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用
Android单元测试(七):Robolectric,在JVM上调用安卓的类

按照文章内容,我总结如下:
“单元测试,是为了测试某一个类的某一个方法能否正常工作,而写的测试代码”:

  • 方法有返回值(包括异常):使用JUnit框架
  • 方法无返回值:
    1) 策略:mock, spy
    2) 框架:Mockito。用途:1. 验证方法调用 2. 指定mock对象的某些方法行为,方法有返回值与无返回值不同处理。

mock需要进行依赖注入
方法:1. setter injection 2. argument injection *3. constructor injection
框架:Dagger2(必要时才用),原理:

  • 生产Dependency的工厂:Module
  • Dependency工厂管理员:Component

Component给Client提供Dependency的方法:

  1. 在Component里面定义一个返回Dependency的方法
  2. Field Injection

Robolectric:在JVM上调用Android的类,协助进行Android单元测试。


不过,在实际编写代码时,也遇到不少问题:

  1. 文章中提到几个框架,分别是JUnitMockitoDaggerRobolectric,配置方法:
    testCompile 'junit:junit:4.12'
    testCompile "org.mockito:mockito-core:2.+"
    testCompile "org.robolectric:robolectric:3.4.2"
    
    版本号会更新,详见官网。
  2. 作者在介绍Dagger时,定义了AppComponent后,对应的自动生成类叫做DaggerAppComponent。
    作者没说这个是怎么才能生成的,其实可以点击工具栏上的Make Project,或者快捷键Ctrl+F9,其实这就是一个编译的过程。
  3. 在运行Robolectric测试前,Android Studio会下载Robolectric的jar包等,然而这个可能因为某些你懂得的原因而下载奇慢,解决方法见加速Robolectric下载依赖库及原理剖析
  4. 在用Robolectric测试时,出现找不到AndroidManifest.xml的报错,解决方案见Stack Overflow
  5. 在用Robolectric测试时,出现找不到android.content.pm.ShortcutManager的类文件这么一个错误,在Android API官网可以找到这个类是在API level 25才添加的,而项目的compileSdkVersion是23。我也不清楚怎么会去找这个类,估计是因为我用了最新的Robolectric,而它要求最新的Android接口吧。将compileSdkVersion改成25解决。
  6. 文中的示例代码中有一句:
    Assert.assertEquals(expectedIntent, actualIntent);
    然而这句话是肯定会报错的,因为看assertEquals的源码可以发现判断相等的依据是expected.equals(actual),这对于Intent来说就是要同一个对象的不同引用才会相等。
    解决方法可以参考Stack Overflow或者Writing Your First Test | Robolectric
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值