首页 > 软件测试/ 正文
关于如何提高代码可测试性的一些看法
2012-09-17 19:49:47 ℃本文是在读了《Working Effectively with legacy Code 》第九章,关于在无法将类放入测试用具中时遇到的四种最为常见的问题:
(1)无法轻易创建该类的对象。
(2)当该类位于测试用具中时,测试用具无法轻易通过编译构建。
(3)我们需要用到的构造函数具有副作用。
(4)构造函数中有一些要紧的工作,我们需要感知到它们。
这四个问题在进行单元测试或者接口测试的时候,会对测试工作造成很大的阻碍,这就是一个代码可测性的问题。当遇到这样的问题的时候,有两种方法,第一、强行构建一个类去完成测试,但是这会造成测试的时候大部分工作都耗费在构建这样一个类的过程中;第二、重构代码,使代码具有可测性。本文将通过书中的列子来简单介绍一下如何提高代码的可测性。
如在一个计费系统中,我们有一个未测试的Java类:CreditValidator。
public class CreditValidator { public CreditValidator (RGHConnection connection, CreditMaster master, String validatorID) { } Certificate validateCustomer(Customer customer) throws InvalidaCredit{ } public class RGHConnection { public RGHConnection(int port, String Name, String passwd) throws IOException { } } } |
我们可以看到CreditValidator构造函数含有三个参数RGHConnection,CreditMaster,validatorID。其中RGHConnection对象在构造时会连接到一个服务器,这个链接被用来从服务器上获取必要的信息,以检查客户的余额。
宁一个类CreditMaster,则提供一些我们在检查余额的过程中会用到的策略信息。该类的构造函数会从一个文件中加载相关信息,并把这些信息保存在内存中以备后用。
如果按照我们开头讲的强制构造一个类来完成测试,如下所示:
public void testCreate() throws Exception { RGHConnection connection = new RGHConnection(DEFAULT_PORT,"admin","rii8ii9s"); CreditMaster master = new CreditMaster ("crm2.mas",true); CreditValidator validator = new CreditValidator(connection,master,"a"); } |
虽然我们构建一个这个样的类,但是你能忍受这个测试的速度,根据《Working Effectively with legacy Code 》书中提到大于1秒的单元测试,都不叫单元测试。因此在测试中建立到服务器的连接并不是一个好的主意。首先其好事就比较长,况且服务器也并不总是处于服务状态。可想而知RGHConnection是一个令人恼火的参数。我们的设想是:若能创建某种伪造的RGHConnection对象并使CreditValidator相信它是一个真正的RGHConnection的话,就可以避开所有链接的问题了。
首先来看一下RGHConnection所拥有的方法:
RGHConnection + RGHConnection(port,name,password) + connect() + disconnect() +RFDIReportFor(id:int):RFDIReport +ACTIOReportFor(customerID:int) ACTIOReport +retry() +fromPacket():RFPacket |
看上去RGHConnection中有一些方法是用来处理与连接相关的任务的:如connect、disconnect以及retry。另外还有一些业务方法。因此如果要伪造一个RGHConnection对象的话,那么这个伪造的对象也必须拥有这些方法也能提供一样的信息。
- 上一篇:只会黑盒测试算专业的软件测试人员吗?
- 下一篇:什么是软件测试自动化?
更多郑州北大青鸟翔天信鸽计算机技术校区,郑州成人计算机培训学校有哪些,郑州北大青鸟支持你成为专业的软件开发人才,河南郑州北大青鸟翔天信鸽网,南阳北大青鸟电脑学校好不好,河南省郑州哪里的大数据计算机学校好相关文章
- J2ME编程程序开发平台的概念
- Java多线程notify ifyall的区别
- 使用Java管理千台规模Linux服务器
- 测试驱动开发的感悟
- 软件测试管理以及与自动化测试的完美结合(上)
- 五个月的软件测试工作感想
- 收集Android程序测试代码覆盖率
- 评估你的代码
- 软件测试员需要学习的基本知识
- 软件测试工程师的分类从新手到专家
- Google的产品质量之道
- 应用质量特性提高测试效率和产品质量
- 怎么让U盘加密
- 系统知识:C盘巨大的文件是什么
- 你的隐私安全吗:Cookie到底是什么?
- Windows 7操作系统内存占用大原因分析
- 关闭笔记本触摸板的方法
- 有关分区的那些事儿
- 怎么把所有文件改成平铺模式?
- BIOS基础知识
- 显示器宽屏知识
- BIOS密码全解
- 怎么打开隐藏文件?
- DOS 概述及入门—DOS的特点
- 硬盘基本知识和挽救硬盘的方法
- 学编程用什么语言好
- 2015年软件开发学ios和Java 、android里的哪个好?
- 郑州哪家的软件编程培训不错
- 郑州Java培训哪家适合大学应届毕业生
- 郑州2018最新Java培训机构排名
- 搜索
-
- 热门标签