文档章节

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

猪刚烈
 猪刚烈
发布于 2014/10/12 11:41
字数 1116
阅读 22
收藏 0
点赞 0
评论 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
海淀
程序员
2018中国城市“数据开放”指数发布:上海第一,贵州第二

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

大数据文摘 ⋅ 05/26 ⋅ 0

做个精致的程序员

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

chainli ⋅ 2013/06/11 ⋅ 0

请修改这段程序,立刻!

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

红薯 ⋅ 2011/12/19 ⋅ 27

做一名较真的工程师

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

李云 ⋅ 2013/08/20 ⋅ 0

学会拒绝,就是放弃对别人好评的依赖!

这个世界上,很多人不懂如何拒绝,比如一个男生向女生表白后…… 你听过几个经典的台词? “你是一个好人” “对不起,我对你没有感觉” “我一直把你当哥哥,希望以后也是” “不好意思,你...

明哥聊求职 ⋅ 05/11 ⋅ 0

写给同事的一封信

亲爱的同事, 转眼我在这个团队工作已有一年的时光,这一年也完成了我从通讯行业转入互联网圈的过渡。过去的一年给了我很多观察(团队)的机会,也带给了我不少思考,从我过去一年的寥寥几篇...

李云 ⋅ 2014/01/05 ⋅ 0

“面子”问题

今天大家吃饭的时候玩了几局杀人游戏,发现了一个有趣的心理现象,当有人犯了严重的逻辑错误而导致一方失利的时,这局结束后都会失利的一方都会不由自主的责备此人,而此人当也总会找各种理由...

最牛傻蛋 ⋅ 2013/11/28 ⋅ 0

「深度」吉湾一号:“中国第一云芯”国产CPU,是真的吗?

“国产CPU”并非噱头,且行且珍惜。 11月2日,“吉湾一号”CPU研发团队在长春宣布,历时6年研发、1年测试,中国首个自主研发的桌面云终端CPU及整机实现量产。“吉湾一号”CPU是将键盘、鼠标、...

行者武松 ⋅ 03/06 ⋅ 0

整合大量开源库项目(六)ListView动画,Activity"抽象化",顺便提一提”抽象类“And"接口"

转载请注明出处:王亟亟的大牛之路 昨天发了一个自己写的简单的诸如EditText一个自定义控件,不过貌似反响不太好,这里再推一推,希望大家给予意见和支持:http://blog.csdn.net/ddwhan0123...

ddwhan0123 ⋅ 2015/12/10 ⋅ 0

软件测试停止依据

1.1 软件测试停止标准 1) 软件系统经过单元、集成、系统测试,分别达到单元、集成、系统测试停止标准。 2) 软件系统通过验收测试,并已得出验收测试结论。 3) 软件项目需暂停以进行调整时,测...

honzhang ⋅ 2017/11/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 29分钟前 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

前言 我是上学期学的汇编,因为有vs又不想用课上教的麻烦的dosbox以及masm32,但是一直没找到高亮插件和能调试的(难在运行不了而找不到答案上,出现的错误在最后放出,还请先达们不吝指点)...

simpower ⋅ 39分钟前 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 42分钟前 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 49分钟前 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 50分钟前 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 58分钟前 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 今天 ⋅ 0

Java对象的序列化与反序列化

Java对象的序列化与反序列化

Cobbage ⋅ 今天 ⋅ 0

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 今天 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部