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

来源:互联网 发布:怎么在mac上新建文件夹 编辑:程序博客网 时间:2024/06/15 05:18

声明:

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。


原创粉丝点击