面向对象的集成测试.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象的集成测试

9.1 面向对象技术对软件测试的影响   面向对象技术因为能够解决传统程序设计语言存在的问题,自提出以后,一度成为研究热点。事实上,采用面向对象技术减少了不少错误的发生,对于提高软件质量起到了很大的作用。   面向对象程序设计的核心思想就是对客观事物的抽象。它是从众多现实生活中感性的事物中抽取事物共同本质的特征,舍弃其非本质的特征。它是将这些本质的特性映射到现实概念类,并且模拟现实的事物,通过对类进行实体化而产生对象的过程。面向对象就是一个由具体到抽象,再由抽象到具体的过程。在这个过程中,把数据及其操作作为一个整体对待,数据本身不能被外部过程直接存取。其具体过程如图9-1-1所示。 图9-1-1 面向对象程序的设计示意图 9.1.1 封装对测试的影响   封装是类的基本特性之一。它将一个对象的各个部分聚集在一个逻辑单元内。封装将类的所有数据和操作作为一个整体对待,数据本身不能被外部过程直接存取,促进了程序的模块化,并在一定程度上简化了类的使用,避免了不合理的操作,并能有效地阻止错误的扩散。但同时,它们也给程序的测试带来了一定的问题。   封装将数据、操作等集成在一个相对独立的程序单元——类中,类中方法的执行离不开一定的对象环境。测试类中的任何一个方法都必须首先将这个类实例化。因此,测试用例的设计与其他测试的不同之处就是在测试设计中对桩模块的设计有所不同。传统测试中的桩模块是模拟函数,在面向对象的测试设计中,则是通过类的实体对象来访问其属性和方法。另外,对于具体的访问与对象的状态相关。因此,在测试用例的设计过程中还需要考虑对象的状态。在面向对象的测试中,如果桩仅仅单一地模拟类中的方法,已经不适用了。在面向对象的测试中对桩设计时,桩模拟的不再是传统测试中的函数,而是模仿对象(Mock Object)。   例如,要单元测试一个使用HttpRequest的对象,测试时需要启动Web服务器,构造Request实例并填入所需要的值,测试完后需要停止Web服务器,这一系列过程可能很麻烦。模仿对象提供了解决这一困难的方法。模仿对象符合实际对象的接口,但需要有足够的代码来“欺骗”测试对象并跟踪其行为。   模仿对象给桩设计提出一个解决方案:Mock Object拥有与被测对象的“合作者”完全一致的接口,在测试中作为“合作者”被传递给被测对象。当被测对象调用合作者时,Mock Object根据测试者的意愿改变某些状态或返回期望的结果,以检查被测程序是否按照所期望的逻辑进行工作,达到测试的目的。或者说,Mock Object作为“仿真器”出现在测试用例中,对被测对象进行“欺骗”和跟踪。而只要Mock Object的行为与被测对象所期望的一致,就不会对被测对象产生任何影响。这种模式对于许多情况都非常有效,但模仿对象有时不能被传递到正在测试的对象。而设计该对象是为了创建、查找或获得其合作者。   具体的做法以Java为例的单元测试来简单说明。首先要进行测试一个计算赢得抽奖的几率的程序,例如,如果从1到50中的数字中抽取6个数字来作为中奖号码,那么共有(50×49×48×46×45)/(1×2×3×4×5×6)个可能的中奖号码。所以中奖的几率为1/1890700。一般情况从n个数字中抽取k个数字,那么会有(n×(n-1)×(n-2)×…×(n-k))/(1×2×3×…×k)种可能。   下面通过程序来实现,在该程序中由两个类来实现,一个接收界面数据并输出结果,另一个计算几率。现在需要测试接收界面数据并输出结果的类,代码如下。   下面我们需要测试类中的方法print(),在该方法中涉及到类LotteryOdds,程序通过类LotteryOdds来计算几率。那么我们需要设置桩模块。这里的桩模块就需要建立MockObject来模拟LotteryOdds。具体过程为:首先将创建代码抽取出工厂方法,由工厂方法来完成创建LotteryOdds对象,在测试子类中覆盖该工厂方法,通过该覆盖的工厂方法创建模仿对象;然后调用覆盖的工厂方法来创建对象,那么创建的就是模仿对象,而不再是原LotteryOdds对象。这样就可以完成单元测试了。具体步骤如下。   1.重构代码   重构是一种代码更改,它使原始功能保持不变,但更改了代码设计,使它变得更清晰、更有效且更易于测试。在本例中,重构的主要工作就是将产生LotteryOdds的过程独立处理成为类的方法之一。重构后的代码如下:   2.建立MockObject   建立类来模拟LotteryOdds类,可以直接继承LotteryOdds类。这里我们建立私有类,这样可以将该MockObject类直接放到测试用例类中,使得MockObject对象是针对单一的测试用例来设计,并可以进一步简化

文档评论(0)

wangyueyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档