JMock实践---(二)返回结果

声明:

Author:赵志乾

Date:2017-7-30

Declaration:All Right Reserved!!!

从Mock对象返回结果

    如果没有显式定义Mock对象的返回结果,JMock将会为带返回值的Mock对象方法返回适当的结果。在大多数的测试中,我们需要显式的定义当Mock对象的某个方法被调用时应当返回的结果。

1、returnValue动作

    可以在预期的will子句中,通过使用returnValue这个动作为Mock对象的方法调用定义返回结果。如下例所示:

oneOf (calculator).add(2, 2); will(returnValue(5));

注意:如果我们定义的返回结果类型不正确,JMock将会判定测试失败。

2、returnIterator动作

    可以在预期的will子句中,通过使用returnIterator这个动作为Mock对象的方法调用定义返回集合的迭代器。如下例所示:

final List<Employee> employees = new ArrayList<Employee>();
employees.add(alice);
employees.add(bob);

context.checking(new Expectations() {{
    oneOf (department).employees(); will(returnIterator(employees));
}});

    注意:使用returnValue和returnIterator动作之间的区别在于:使用returnValue动作时,每次返回的结果都是一样的,一次调用就会消耗掉所有的迭代器;而使用returnIterator动作时,每次调用会消耗掉一个迭代器,即每次调用会返回一个新的迭代器。

3、onConSecutiveCalls动作

    可以在预期的will子句中,通过使用onConsecutiveCalls这个动作为Mock对象的方法调用定义不同的返回结果或者定义不同的动作。如下例所示:

atLeast(1).of (anObject).doSomething();
   will(onConsecutiveCalls(
       returnValue(10),
       returnValue(20),
       returnValue(30)));

    注意:除了上面的这种方式,还可以通过定义多条预期来达到对Mock对象的连续调用返回不同结果的目的。如下例所示:

oneOf (anObject).doSomething(); will(returnValue(10));
oneOf (anObject).doSomething(); will(returnValue(20));
oneOf (anObject).doSomething(); will(returnValue(30));



注:本博客中的实例代码均来自于JMock Cookbook。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值