文档章节

集成测试的“面子”和“里子”

猪刚烈
 猪刚烈
发布于 2014/10/12 11:41
字数 1116
阅读 22
收藏 0

本文原文连接: http://blog.csdn.net/bluishglc/article/details/18768999,转载请注明出处!

程序是“分层”的,我们要探讨的是集成测试针对的层面问题。本文所谓的“面子”(Top Level API)指的是程序的最上层接口,也就是被UI或外部系统直接调用的类和方法。“里子”(Lower Level Classes/Methods)就是工作于最上层接口之下,为最上层提供服务的所有下层类和方法。


在谈到集成测试的时候,我们得先来说说单元测试。任何系统都是由一系列相互依赖的类和方法构成的,单元测试的初衷是针对某个类和方法进行“独立”的测试,如果被测试的对象依赖到其他类和方法,则使用mock的方式来隔离被依赖对象对测试的影响。例如某测试对象A依赖另外一个测试对象B,如果我们在测试A的过程中,使用了一个输入与输出均设定了期望值的B的仿制对象,那么这是标准的单元测试,如果我们没有对B进行仿制,那么对于A的测试实际上是对A及其依赖对象B的一次广义上的集成测试!所以对比较地说,单元测试是排除了一切干扰和不确定因素,特别是其他依赖对象的影响,而对某个类和方法进行的“单独”测试,而如果一测试中没有排除掉这些干扰,引入了哪怕是一个非经测试的依赖对象,我们都可以将其看作是“广义“上的集成测试,当引入的依赖越来越多,上升到对其他子系统和模块的依赖时,这时就是我们一般意义上所指的“集成测试”了。


所以我们可以看到集成测试是有层次的,从下至两个相互依赖类之间的测试到上至模块和系统之间的集成测试,都是可以进行的,这里有一个如何把握这种层次或者说是粒度的问题,这就是本文想要阐述的一种易于拿捏和切割的规则:“面子”是一定要测的,“里子”可以视目标类和方法的复杂程度和重要性有选择的进行,对“里子”的测试只是为准确找出引起最上层也就是"面子"问题的准确位置而进行的相对底层与细粒度的测试,可以说这些测试是过程性的,虽然其本身可以用于验证目标代码的正确性,但其被创建的根本初衷是为了定位引发最上层问题的准确位置而设计的。


从实际的开发工作来看,以往程序员们出于要求或是自我素养,做的大多数是单元测试,集成测试一般交给测试人员以黑拿方式进行,那么有没有需要开发人员写集成测试用例的时候呢?从我的工作经验来看,有很多场景是需要的。一般来说,那些不方便做单元测试的场景就是需要集成测试出马的时候,比如严重依赖容器和外围设施与框架的代码,或者说出于工作量,时间的考虑,开发人员只想以最少的代码驱动已经完成的代码并检查基本功能的时候等等。对于笔者目前正在开发的基于HBase的系统来说就是属于前者,因为对于像基于Hbase的应用程序来说,很多代码严重依赖HBase的基础设施,可能会一些第三方面的mock框架来模拟一个HBase的运行环境,但是从实际工作的效果来看,使用自上而下的广义集成测试是非常有效且易于实现和控制的。从本质上讲,我们这里所谓的广义上的集成测试和单元测试是殊途同归的,目的都是排查代码中的错误,只不过前者偏向于自上而下,由粗到细地方式展开,而后者则专注于最细精粒度的测试上。








本文转载自:http://blog.csdn.net/bluishglc/article/details/18768999

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
公司发了奖金就一定要请上级领导吃饭吗?

熬了大半年,公司在部门绩效外,还发了奖金。领导在知道这件事后,聊天时含沙射影的叫我们请吃饭喝酒,一定要请吗?他也有发奖金,金额是我们的两倍。 不管是领导厚颜无耻,还是玩笑调侃,既...

明哥聊求职
11/06
0
0
对话智行者CTO王肖:高速自动驾驶车“星骥”的落地之路

和秋名山并驾齐驱的“通天大道”天门山盘山公路,因其10.77公里,高差 1300多米,99道弯,180度急弯,左为山体,右为万丈悬崖,成为司机们的忌惮之地。近日,这条“通天大道"上,出现了一辆智...

于胜越
09/17
0
0
2018中国城市“数据开放”指数发布:上海第一,贵州第二

     5月26日在2018贵阳数博会上,复旦大学联合提升政府治理能力大数据应用技术国家工程实验室、国家信息中心数字中国研究院发布了《2018中国地方政府数据开放报告》(以下简称《报告》)...

大数据文摘
05/26
0
0
做个精致的程序员

你喜欢跟木头一样的人待在一起吗?我想绝大多数人的答案是否定的。如果你就是木头一样而自己又意识不到呢?恰好你周围的人又都是属于那绝大多数的人群。无论你是怎样的人,初次打交道的人在与...

chainli
2013/06/11
0
0
请修改这段程序,立刻!

本文是从 Fix That Code Immediately! 这篇文章翻译而来。 你们正在开发一个新项目,你在一个地方看到一段有问题的代码。错误的处理方式是,“啊,别人写的,我最好别碰它”,“我没有时间去...

红薯
2011/12/19
4.7K
27

没有更多内容

加载失败,请刷新页面

加载更多

关于MySQL 通用查询日志和慢查询日志分析

MySQL中的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志。 1)通用查询日志:记录建立的客户端连接和执行的...

瑞查德-Jack
9分钟前
0
0
Vue组件封装 参数传递和事件传递

参数传递 子组件先定义好接收的参数和事件 <div > {{title}} <div class="row"> <Button icon="md-refresh" @click="refresh()" >刷新</Button> </div>......

Carbenson
13分钟前
0
0
如何在10分钟内设置EOS钱包和帐户?

由于SuperNode超级节点社区建立在EOS之上,我们希望引导我们的社区成员设置EOS钱包和帐户,以便充分参与我们的生态系统。 虽然设置过程可能不如其他区块链系统那么简单,但不要担心。本指南旨...

笔阁
18分钟前
2
0
8.04-Win10非U盘重装系统

注意:最好准备一个你所需版本的秘钥(不能是数字0开头的) 【所需:Win10的ISO镜像、能够解压ISO格式的解压缩工具、最好准备你所需版本的秘钥(不能是数字0开头的)】 1、创建新的文件系统为...

静以修身2025
18分钟前
1
0
Docker的架构与自制镜像的发布

一. docker 是什么 大家都知道虚拟机吧,windows 上装个 linux 虚拟机是大部分程序员的常用方案。公司生产环境大多也是虚拟机,虚拟机将物理硬件资源虚拟化,按需分配和使用,虚拟机使用起来...

程序猿拿Q
35分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部