• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件单元测试中的伪对象

发布: 2009-3-30 13:09 | 作者: 不详 | 来源: 测试时代采编 | 查看: 31次 | 进入软件测试论坛讨论

领测软件测试网

每一个MockControl包含一个生成的伪对象的引用。开发人员可以使用这个方法取得伪对象并且转换为实际的对象类型。
//get mock control    MockControl control = MockControl.createControl(Foo.class);    //Get the mock object from mock control    Foo foo = (Foo) control.getMock();·行为定义方法
public void setReturnValue(... value);
public void setThrowable(Throwable throwable);
public void setVoidCallable();
public void setDefaultReturnValue(... value);
public void setDefaultThrowable(Throwable throwable);
public void setDefaultVoidCallable();
public void setMatcher(ArgumentsMatcher matcher);
public void setDefaultMatcher(ArgumentsMatcher matcher);

MockControl允许开发人员定义伪对象的每一个方法的行为。当他在准备态时,开发人员可以调用伪对象的方法。首先规定哪一个调用方法的行为需要被定义。然后开发人员可以使用行为定义的方法之一来定义行为。例如,看一下下面的Foo类:
//Foo.java    public class Foo {      public void dummy() throw ParseException {        ...      }      public String bar(int i) {        ...      }      public boolean isSame(String[] strs) {        ...      }      public void add(StringBuffer sb, String s) {        ...      }    }伪对象的行为可以按照下面的方式来定义:
//get mock control    MockControl control = MockControl.createControl(Foo.class);    //get mock object    Foo foo = (Foo)control.getMock();    //begin behavior definition    //specify which method invocation's behavior    //to be defined.    foo.bar(10);    //define the behavior -- return "ok" when the    //argument is 10    control.setReturnValue("ok");    ...    //end behavior definition    control.replay();    ...MockControl中超过50个方法是行为定义方法。他们可以如下分类。

o        setReturnValue()
这些方法被用来定义最后的方法调用应该返回一个值作为参数。这儿有7个使用原始类型作业参数的`setReturnValue()方法,如setReturnValue(int i)或setReturnValue(float f)。setReturnValue(Object obj)被用来满足那些需要对象作为参数的方法。如果给定的值不匹配方法的返回值,则抛出AssertionFailedError异常。
当然也可以在行为中加入预期调用的次数。这称为调用次数限制。
      MockControl control = ...      Foo foo = (Foo)control.getMock();      ...      foo.bar(10);      //define the behavior -- return "ok" when the      //argument is 10. And this method is expected      //to be called just once.      setReturnValue("ok", 1);      ...上面的代码段定义了bar(10)方法只能被调用一次。如果提供一个范围又会怎么样呢?
      ...      foo.bar(10);      //define the behavior -- return "ok" when the      //argument is 10. And this method is expected      //to be called at least once and at most 3      //times.      setReturnValue("ok", 1, 3);      ...现在bar(10)被限制至少被调用一次最多3次。更方便的是Range已经预定义了一些限制范围。
      ...      foo.bar(10);      //define the behavior -- return "ok" when the      //argument is 10. And this method is expected      //to be called at least once.      setReturnValue("ok", Range.ONE_OR_MORE);      ...Range.ONE_OR_MORE是一个预定义的Range实例,这意味着方法应该被调用至少一次。如果setReturnValue()中没有定义调用次数限制,如setReturnValue("Hello"),Range.ONE_OR_MORE被认为是缺省值。还有两个预定义的Range实例,Range.ONE(就一次)和Range.ZERO_OR_MORE(对调用次数没有限制)。
这儿还有一个特定的设置返回值的方法:setDefaultReturnValue()。他将代替方法的参数值作为返回值,缺省的调用次数限制为Range.ONE_OR_MORE。这被称为方法参数值敏感性。
      ...      foo.bar(10);      //define the behavior -- return "ok" when calling      //bar(int) despite the argument value.      setDefaultReturnValue("ok");      ...o        setThrowable

setThrowable(Throwable throwable)被用来定义方法调用异常抛出的行为。如果给定的throwable不匹配方法的异常定义,则AssertionFailedError会被抛出。调用次数的限制与方法参数值敏感性是一致的。
      ...      try {        foo.dummy();      } catch (Exception e) {        //skip      }      //define the behavior -- throw ParseException      //when call dummy(). And this method is expected      //to be called exactly once.      control.setThrowable(new ParseException("", 0), 1);      ...o        setVoidCallable()
setVoidCallable()被用于没有返回值的方法。调用次数的限制与方法参数值敏感性是一致的。
      ...      try {        foo.dummy();      } catch (Exception e) {        //skip      }      //define the behavior -- no return value      //when calling dummy(). And this method is expected      //to be called at least once.      control.setVoidCallable();      ...o        Set ArgumentsMatcher
在工作态时,MockControl会在伪对象的方法被调用时搜索预定义的行为。有三个因素会影响搜索的标准:方法标识,参数值和调用次数限制。第一和第三个因素是固定的。第二个因素可以通过参数值敏感性来忽略。更灵活的是,还可以自定义参数值匹配规则。setMatcher()可以通过ArgumentsMatcher在准备态时使用。
   

文章来源于领测软件测试网 https://www.ltesting.net/

42/4<1234>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网