像 google 一样测试系列之二:方向篇

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

一、左移方向

左移目的大家都明了,不必细说。但左移进行方向不知大家是否有想过?我觉得有2个方 向。在开发现有代码的基础点上:

向左:如何让现有代码更可测。

这里会因为人的经验,单测写法等各种原因会认为现有代码不可测。同时,输出的可测案。

例上,开发在短时间内也难以修改。新代码也不一定会按照可测性来。这个在测试程度上可能会依赖开发,如果离职换了一个新来的开发,难免又会出现这种情况。

向右:如何能测试到更多的现有代码。

这个是基于测试角度,假设开发代码就是这个样子,如何才能测试更多。这需要测试人员对单测的深度理解,对android环境,及代码实现上一个熟悉。如异步线程如何可测。

在左移上,2个方向可同时进行,这样将会达到一个最大覆盖率。

本文后续文章,都将以 向右方向进行探索和实践。

二、google单测为什么能达到70%的覆盖的理解

                         

Google单测覆盖率达到70%。然而为什么我们却达不到,甚至只能是20%。

我认为:

1、开发代码可测规范性是个原因;

2、单测的理解误区:

Google对单测的定义,也是不同于以前,可能不少人对单测的理解还停留在对一个类的测试上。google单测的定义如下图:基本上能测试的都被定义为单测了。

3、测试范围上:

国内的很多单测,大部分只做了 下图中的 1、2,很少有做 3,而4、5、6部分是基本没有。即使有也只是通过UI自动化的方式来操作的。而一般Android业务代码上,4、5占了很大比重。

以上几点是主要导致覆盖率低的原因。

三、google单测中 2种测试代码的运行机制

1、google单测之Test运行机制:

(1)Test 在google官网文档里是:Local Unit Tests。

(2)主要测试范围是: java层测试,和部分依赖Android环境的测试。

(3)Junit和Testng支持:支持Junit4和Testng,及Mock库。

(4)运行原理:

将依赖的android环境android.jar,用一个mock的android.jar替代,这个jar没有具体的实现代码,只有接口,所有的返回均可通过mock来实现你的需求。

因此是运行在JVM上的。

(5)测试代码目录:src/test/java/

(6)运行模式如下:

2、google单测 之 AndroidTest 运行机制:

(1)AndroidTest 在google官网文档里是:Instrumented Tests。这里也不要认为和之前Robotium时代的Instrumented test一样,是不一样的,这里是比之前高级一点;

(2)运行环境:运行在真机或模拟器上;

(3)主要测试范围是:理论上一切都可测,包括 Local Unit Tests;

(4)Junit和Testng支持:普通测试用例支持Junit和Testng,但Application的测试只能用Junit;

(5)运行原理:测试代码和源代码分别build成一个app,安装到真机,但是是运行在同一个进程里,因此可以调用业务代码和反射执行。测试代码运行环境均是android真环境。你可以选择mock或不mock,可以得到业务app的context等;

(6)测试代码目录:src/androidTest/java/;

(7)运行模式如下:

汇总:

问题:

你认为android测试,覆盖率可以达到多少?

UI层可以覆盖么?

组件交互层可以覆盖么?

适配可以覆盖么?

未完待续……

搜索微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏非著名程序员

超级实用:小而精,优而美的开源库,开年第一篇有意思的分享

昨天是元旦,新年的第一天,估计细心的读者可能发现了,我昨天发起了一个抽奖送书活动,而且发布的时间正好是1月1号11点11分。这可不是一个巧合,这是我故意为之,是...

2086
来自专栏Java帮帮-微信公众号-技术文章全总结

Java就业指导书

前言 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可...

2134
来自专栏编程微刊

进阶攻略|最全的前端开源JS框架和库

1616
来自专栏Albert陈凯

Spark开发电商日志分析用户行为聚合功能练习下面开始搭建开发环境注意Task表中最后一个列task_param中,Json的StartDate和EndDate需要设置成今天,因为mock数据的时候,

项目介绍 ? 项目介绍 电商网站的各种用户行为进行分析 访问首页 → 点击商品 → 添加购物车 → 结算 访问首页 → 输入关键词 → 点击商品列表 → 点击...

4619
来自专栏bboysoul

ASCII码表

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑...

803
来自专栏葡萄城控件技术团队

WinRT开发语言的功能和效率

WinRT开发有着多种选择性,就编程语言这一点就表现的很突出;这里就这一点 深入展开,探讨在WinRT开发之初如何依据各 个编程语言的特性、功能和效率来对 产品...

1806
来自专栏jojo的技术小屋

原 荐 svga 动画

作者:汪娇娇 时间:2017年12月26日 对于一些小的简单的动画,借助css、js差不多就能实现,而且还不能保证还原度百分百(还能接受); 对于那些复杂的动画...

4644
来自专栏CSDN技术头条

轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒

【编者按】Tumblr是目前全球最大的轻博客网站,也是轻博客网站的始祖。当下已有超过1.96亿博客,930亿帖子,每秒2万3千请求。近日,该公司网站可靠性工程师...

1945
来自专栏微信公众号:Java团长

Java就业指导

想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面...

912
来自专栏企鹅号快讯

反编译对于黑客技术的帮助有多大

目前很多技术都被涉及了,也有很多的技术被挖掘出来,但是很多人对技术不是这么了解的,可能会吃亏,比如说目前挺火的黑客技术还有反编译技术都是属于很多了解却不是这么熟...

34511

扫码关注云+社区