单元测试学习笔记 之二

发表于:2011-8-23 11:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  2.3 应付构造函数中的隐藏式依赖

  当ClassUnderTest中出现隐藏式依赖时,最常用的有两种手法来打破这种依赖。我们分别来看一下。

  2.3.1 转变成参数注入式依赖

  对于像C#和Java这样的语言,由于它们支持在一个构造函数中去调用另一个构造函数,因此可以很方便地增加一个构造函数,把隐藏式依赖转变成参数注入式依赖。下面的UML图阐释了这种手法。

  而对于C++,由于它没有提供在构造函数中调用另一个构造函数的功能,因此通常的作法就是把公共的的初始化代码放入一个init()私有方法中去,让不同的构造函数去调用init()方法。

  2.3.2 使用“调包方法”

  还可以考虑给ClassUndertTest引入一个“调包方法”,使得测试类和测试方法可以很方便地将合作者类“调包”成伪合作者类。这里的“调包方法”本质上就是一个setter方法,但是为了表明这个特殊的setter方法只应该被测试类和测试方法调用,我们一般给调包方法命名为SupersedeCollaborator()。下图就是一个演示。

  这里必须要提醒的是,在C++中使用这个手法时必须注意在“调包方法”中不能引起资源泄漏,也就是说,必须先释放掉原有的合作者对象,再以伪合作者替代之。

  2.4 怎样测试ClassUnderTest中的private方法?

  如果要测试一个类的private方法,答案的总体思路是:适当打破访问权限。也就是说,我们可以把private方法声明成protected方法,然后对ClassUnderTest进行派生,得到一个“测试用子类”,在该“测试用子类”中声明一个public方法,该方法是ClassUnderTest中的protected方法的代理。这种手法可以用下图来表示。

53/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号