mockito模拟验证

时间:2012-10-22 19:55:39

标签: java mockito

//Let's import Mockito statically so that the code looks clearer
import static org.mockito.Mockito.*;

//mock creation
List mockedList = mock(List.class);

//using mock object
mockedList.add("one");
mockedList.clear();

//verification
verify(mockedList).add("one");
verify(mockedList).clear();

我不明白这个结构有什么意义?它有什么用?它与调用函数有什么不同?
文档相当薄 谢谢

4 个答案:

答案 0 :(得分:3)

mockedList.add("one"); mocked object同时执行verify(mockedList).add("one");操作时,它会记住您的操作。因此,当您执行add时,它会验证mockedListone上使用参数{{1}}进行调用。

希望你能有所作为。

答案 1 :(得分:3)

您希望测试A类的某些方法Foo在类B的对象上调用某个方法Bar。换句话说,您正在测试A类。在测试期间,您要进行测试B类的模拟然后你以某种方式将这个模拟对象传递给A类(取决于A类实际上是如何工作的)。当您的测试运行A类的Foo方法时,您希望在类B的模拟上调用Bar方法。通过调用verify方法调用Bar方法,在Foo方法测试后,您可以检查Foo方法是否实际正常工作 - 它调用Bar

答案 2 :(得分:1)

mockito的验证方法是验证方法调用次数,如果调用时间为1,我们可以省略此参数,参见Mockito Line 1473的源代码

public static <T> T verify(T mock) {
    return MOCKITO_CORE.verify(mock, times(1));
}

所以你编码

verify(mockedList).add("one");
//is the same as
verify(mockedList,times(1)).add("one");

确实要验证add方法执行一次

答案 3 :(得分:0)

确实在你的例子中很明显,但是在实际代码测试期间出现了验证方法调用的主要想法 - 想象一些代码执行方法调用,如:

class A{
 ....
 service.doSomething(<some arguments>)
 ....
}

为了测试它,你将传递模拟服务对象,但有时你想验证为该调用传递的特定参数值(或调用次数),所以你将使用像你的例子中的验证。