专栏名称: 51Testing软件测试网
51Testing软件测试网,人气最旺的软件测试技术门户,提供软件测试社区交流,软件测试博客,人才服务,测试沙龙,测试杂志,测试资料下载等全方位信息服务,是国内最专业的软件测试就业培训、企业服务供应商...
目录
相关文章推荐
51好读  ›  专栏  ›  51Testing软件测试网

关于Android单元测试的几个重要问题讲解

51Testing软件测试网  · 公众号  · 测试  · 2016-12-29 17:31

正文



前言

已经一个月没写文章了,由于9月份在plan国庆旅行计划,国庆前前后后去了14天旅行,所以没时间写,哈哈。

言归正传,上一篇文章《Android单元测试 - 如何开始?》介绍了几款单元测试框架、Junit & Mockito基本用法、依赖隔离 & Mock概念,本篇主要解答单元测试中几个重要问题。

在单元测试交流微信群,很多新进来的小伙伴,都会几个大同小异的问题。我们几个老鸟们答完一次又一次(厚颜无耻地把自己算上^_^),笔者是有点不耐烦了,后来就等其他同学回答他们.....其实大家提的问题,归根到底就是“依赖问题”,jvm依赖还是android依赖?用到native方法报错怎么办?静态方法怎么解决?

于是呢,笔者决定专门写一篇文章,来讲解这几个问题。

  • 如何解决Android依赖?

  • 隔离Native方法

  • 解决内部new对象

  • 静态方法

  • RxJava异步转同步

1.如何解决Android依赖?

小白:“Presenter中用到TextUtils,运行junit时报'java.lang.RuntimeException: Method isEmpty in android.text.TextUtils not mocked'错误... 是不是要用robolectric?”


别急,还未到robolectric出场的时候呢!

由于junit运行在jvm上,而jdk没有android源码,所以TextUtils这些在android sdk中的类,运行junit时就引用不上了。既然jdk没有,我们就自己加呗!

在test/java目录下,创建android.text.TextUtils类


关键是要个TextUtils同包名、同类名、同方法名。注意不是在main/java下创建,不然会提示Duplicate class found in the file...单元测试运行妥妥的:


原理很简单,jvm运行时会找android.text.TextUtils类,然后找isEmpty方法执行。学过java反射的同学都知道,只要知道包名类名,就可以拿到Class,知道该类某方法名,就可以获取Method并执行。jvm也是类似的机制,只要我们给一个包名类名与android sdk相同的类,写上方法名&参数&返回值相同的方法,jvm就能编译并执行。

(提示:android的View之类也能这么搞噢)

2.隔离Native方法

小白:“我用到native方法,junit运行失败,robolectric也不支持加载so文件,怎么办?”

Model类:


单元测试:


run ModelTest... 报错java.lang.UnsatisfiedLinkError: com.test.unit.Model.nativeMethod()

上篇文章《Android单元测试 - 如何开始?》讲述的“依赖隔离”,这里要用到了!


改进单元测试:


再run一下,pass了:


这里稍微讲讲java查找native方法的过程:

1).Model.java全名是com.test.unit.Model.java;

2).调用native方法nativeMethod()后, jvm会去找C++层com_test_unit_Model.cpp,再找com_test_unit_Model_nativeMethod()方法,并调用。

在APP运行过程,我们会把cpp编译成so文件,然后让APP加载到dalvik虚拟机。但在单元测试中,没有加载对应的so文件,也没有编译cpp呀!大牛们可能会尝试单元测试时加载so文件,但完全没有必要,也不符合单元测试的原则。

所以,我们可以直接用Mockito框架mock native方法就行啦。实际上,不仅仅是native方法需要mock,很多依赖的方法、类都要mock,下面会讲到更常用的场景。

......

推荐阅读

点击阅读☞ 五款Android应用的自动化测试工具推荐

点击阅读☞ Android 单元测试那些事情







请到「今天看啥」查看全文


推荐文章
心理语录  ·  对自己好点,别活得太累!
7 年前
高顿金融分析师  ·  远离身边的道德婊
7 年前
明源地产研究院  ·  厨房设计的38个魔鬼细节,我只看了20遍
7 年前