像 google 一样测试系列之六: 实战篇

作者:郑小辉 团队:腾讯移动品质中心TMQ

前言

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,获取更多测试干货!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

day07_Tomcat服务器与http学习笔记

    WEB,在英语中web即表示网页的意思,它用于表示Internet主机上(服务器)供外界访问的资源。

1181
来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

2301
来自专栏醉梦轩

Ubuntu安装Proxychains

1K3
来自专栏散尽浮华

ELK实时日志分析平台环境部署--完整记录

在日常运维工作中,对于系统和业务日志的处理尤为重要。今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为...

6097
来自专栏黑白安全

php漏洞与代码审计

在甲方公司做代码审计一般还是以白盒为主,漏洞无非这么几类,XSS、sql注入、命令执行、上传漏洞、本地包含、远程包含、权限绕过、信息泄露等。

1345
来自专栏calvin

jira webhook 事件触发并程序代码调用jenkins接口触发构建操作

开发管理工具触发站点构建事件,事件处理中需要调用Jenkins接口开始构建动作。 我的应用场景: 使用jira作为管理工具,在jira中创建自定义的工作流来...

7933
来自专栏Kurt Niu 的博客

[开源]使用C# 对CPU卡基本操作封装

Github 地址:https://github.com/zifeiniu/CPUCardLib

1782
来自专栏容器云生态

Docker1.12尝试

前言:在docker1.12中默认增加了swarm mode 编排功能,并且官方支持更多的插件来进行docker的网路和外接存储插件,不过目前测试swarm m...

48010
来自专栏黑白安全

网站漏洞扫描工具 WAScan-Web Application Scanner

WAScan是一款开源工具,该工具采用的是基于黑盒的漏洞挖掘方法,这也就意味着研究人员无需对Web应用程序的源代码进行研究,它可以直接被当作成一种模糊测试工具来...

9823
来自专栏Java架构沉思录

Linux常用Shell脚本知多少

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

1371

扫码关注云+社区

领取腾讯云代金券