前言
Mock和反射执行,会穿插在各章节中,因此不单独成节了。
一、purify 业务代码结构分析
Purify 架构改革后,结构不再是一般的Activity和里面事件点击了,而是加入了引擎。
目前的架构如下:
可以看到:
1、弱化了Activity
2、统一用引擎加载Page
3、在各page中定义各view组件,并在自定义组件中实现事件。
4、Activity的入口 就变成了page的入口
二、测试切入点
以上结构分析可知: 测试切入点为 page。
三、测试工程建立与创建Test
1、测试目录建立
Android studio 给每一个module已经默认建立好测试工程了,如下图:
AndroidTest目录:为Instrumented Test,Android层的测试,运行在真机或模拟器上,主要写集成用例和涉及Android组件和环境的一些用例。比如Application,Activity,Service,SharedPreferences等。
Test目录: 为Local Unit Tests,java层的测试,部分依赖Android环境的测试。主要写java的单元测试,不同链路的接口测试,依赖Android环境较单一的测试。
2、测试库依赖
工欲善其事,必先利其器。先把需要的依赖库加进来。
修改build.gradle,增加如下内容:
指定Junit4运行器
testInstrumentationRunner ‘android.support.test.runner.AndroidJUnitRunner’
有混淆的时候,指定混淆文件:
加入依赖库:
到此,测试环境步骤已经搭建完毕。可以开始创建测试用例了。
3、创建Test
Android studio上,打开你想要写用例的业务代码,按ctrl+shift +T,就会弹出创建测试用例框,选择create new test。
在弹出框上,选择你要测试的方法。
测试环境支持如下几种:用Junit还是Testng,见前面文章说明。
建议:为了保持test和AndroidTest的统一,建议统一用Junit4。
弹出选择是创建Instrumented tests还是 local unit Tests:
(1)根据被测方法情况选择对应目录;
(2)也可以直接选androidTests,因为local unit Tests可以运行在androidTests中。
4、运行Test
(1)运行 test目录下的测试用例: 右键 选择run xx,就可以直接运行。
(2)运行androidTest目录下的测试用例: 先连接手机或模拟器,再运行。
测试代码空白处,右键,选择run xxx,就可直接运行了。快去试试你第一个测试用例吧。
四、Application级白盒测试
1、方式一:
新建Junit测试 java类。
如业务Application中含有如下方法:
则测试代码如下:
2、方式二: ##
因为可以调用业务代码。如果业务Application中有单列获取,则可直接调用获取。
五、Activity的白盒测试
假设Activity如图:
对应的page如图:其中 method都是private方法。都被UI层调用。
则method测试代码如下:
带参数测试:
六、异步线程的白盒测试
通常android开发中使用异步的方式有如下几种:
1、new Thread()及单例方式
2、handle.post方式
3、AsyncTask方式
4、ExecuteService方式
这里选取常见的1种方式举例:
handle.post方式
业务代码handle如图:可以看到handle是内部new的。
则测试代码如下:
七、异步回调的白盒测试
业务代码如下: 异步方法中,接收一个callback,现在要测试这个异步方法,思路见前章节。
则测试代码如下:
八、覆盖率与测试报告
1、覆盖率情况:
还未完全写完用例的情况下, 白盒测试实践模块覆盖率50%。
2、测试报告
Test和androidTests报告是分开的,不过可以开发代码合并成一个报告:
关注微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!