像 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 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.4K7
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2955
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2810
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4355
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

37710
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

5198
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

5788
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2886
来自专栏魂祭心

原 canvas绘制clock

4994
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

6866

扫码关注云+社区