当前位置: 首页 > 工具软件 > jMock > 使用案例 >

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

有骏祥
2023-12-01

声明:

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。


 类似资料: