//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();
我不明白这个结构有什么意义?它有什么用?它与调用函数有什么不同?
文档相当薄
谢谢
答案 0 :(得分:3)
当mockedList.add("one");
mocked object
同时执行verify(mockedList).add("one");
操作时,它会记住您的操作。因此,当您执行add
时,它会验证mockedList
在one
上使用参数{{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>)
....
}
为了测试它,你将传递模拟服务对象,但有时你想验证为该调用传递的特定参数值(或调用次数),所以你将使用像你的例子中的验证。