文档章节

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

猪刚烈
 猪刚烈
发布于 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
海淀
程序员
对话智行者CTO王肖:高速自动驾驶车“星骥”的落地之路

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

于胜越
09/17
0
0
做个精致的程序员

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

chainli
2013/06/11
0
0
2018中国城市“数据开放”指数发布:上海第一,贵州第二

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

大数据文摘
05/26
0
0
请修改这段程序,立刻!

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

红薯
2011/12/19
4.6K
27
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装rsync及两台机器进行文件同步

centos7安装rsync及两台机器进行文件同步 2017年12月21日 11:17:46 码农下的天桥 阅读数:2210 标签: centosrsync同步 更多 个人分类: 后端 所属专栏: 研发模式及运维 版权声明:本文为博...

linjin200
45分钟前
2
0
jpg、jpeg、png... 的区别

jpg、jpeg、png... 的区别 对于做设计这一行的人来说,这几个图片格式是最常用的,也是最常见的,几乎每一天都要与他们打交道。 刚刚入门的新人通常不知道在什么地方如何使用他们或者说如何更...

DemonsI
今天
5
0
白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,...

oKong
今天
4
0
Character的static方法

基本类型char的包装类是Character,使用的比较多,大家是比较熟悉的。 我只是觉得里面有很多static方法,平时不怎么用,学习一下怎么实现的,或许日后就用到了。 static int compare(char x,...

woshixin
今天
2
0
正则介绍_sed

10月17日任务 9.4/9.5 sed sed工具 匹配打印 -n 只打印匹配行,不然其他行也会打印出来 p 打印(配合-n使用) [root@centos7 tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/ba...

robertt15
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部