关闭

单元测试—如何测试void方法

发表于:2013-12-17 11:17

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

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

  在作一个void方法的单元测试时,测试人员就比较迷惑了(很多人也都在问void方法怎么测试) , void的方法是没有返回值的方法。那么如何它的结果呢。
  在这里和大家一起讨论一下void应该怎么测试。
  首先站在测试角度来分析void方法, 每一个方法的设计都有特定功能的,在下面列一些void方法可能作的事(不是全部,只体现特征)
  1、 在方法体内对私有的对象实例进行属性设置
  2、作了日志输出
  3、调用另外实例方法
  4、初始化某个类型变量(可能是私有的或者全局的)
  5、。。。。。。
  如上分析void 方法里不是独立存在的,它的工作必定反映在某一个地方,可能是某个类,某个文件,某个服务。。。等等
  其次分析void的所作工作反映或影响了那个地方,找到他后,找出办法来获取这个类, 这个文件,这个服务。。。
  下面据一个常见的例子
public class ServiceHolder {
private final Set<Object> services = new HashSet<Object>();
public void addService(Object service) {
services.add(service);
}
public void removeService(Object service) {
services.remove(service);
}
}
  我们要测试void  addService (..) 这个方法,首先分析它的影响或作用, 它影响的services 这个变量,这个变量是个私有的。 测试这个方法的正确,就要验证services这个变量对象正确性。
  如何获取这个私有变量?  我们用mock方法来作。
@Test
public void testAddService() throws Exception {
ServiceHolder tested = new ServiceHolder();
final Object service = new Object();
tested.addService(service);
// 获得私有变量今昔国内验证
Set<String> services = Whitebox.getInternalState(tested,"services");
assertEquals("Size of the \"services\" Set should be 1", 1, services.size());
assertSame("The services Set should didn't contain the expect service",
service, services.iterator().next());
}
  Whitebox.getInternalState(tested,"services");  是powermocker提供的一个方法通过反射获得对象实例。
  上面这个例子列出来一个简单的void测试方法, 根据不同的情况可能获取验证对象的方法不同,根据实际情况去考虑。
  另外PowerMock中org.powermock.reflect.Whitebox 类提供了绕过封装的一些方法。
相关文章
单元测试—mock技术基础
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号