文档章节

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

猪刚烈
 猪刚烈
发布于 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
海淀
程序员
做个精致的程序员

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

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
不要脸以后,我过得怎么样了呢?

自古以来,中国人讲究的就是人要脸,树要皮。 做人做到没脸没皮,大部分人是不愿意的。 可事实上,很多时候确实需要点“不要脸”的精神。 你想做到不被别人讨厌,其实是件很简单的事情,比如...

蜗牛学院
07/12
0
0
学会拒绝,就是放弃对别人好评的依赖!

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

明哥聊求职
05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud SpringBoot mybatis分布式Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用...

itcloud
8分钟前
0
0
c++ std::bind和std::function

定义于头文件 <functional> std::bind 函数绑定,https://zh.cppreference.com/w/cpp/utility/functional/bind // bind 用例#include <iostream>#include <functional> // 自定义的一......

SibylY
11分钟前
0
0
SecureCRT的安装与破解(过程很详细!!!)

SecureCRT的安装与破解(过程很详细!!!) SecureCRT的安装与破解(过程很详细!!!) 使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方...

DemonsI
15分钟前
0
0
介绍几款可用的web应用防火墙

目前有两款,基于软件和基于应用程序的web应用防火墙。基于软件的产品布置在Web服务器上,而基于应用程序的产品放置在Web服务器和互联网接口之间。两种类型的防火墙都会在数据传入和传出web...

上树的熊
22分钟前
1
0
用Visual Studio开发以太坊智能合约

区块链和以太坊 自从我熟悉区块链、以太坊和智能合约以来,一直失眠。 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议使用以太坊网站官方客户端应用程序(Ethereum Wallet)也...

geek12345
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部