0
//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

4 回答 4

3

当您mockedList.add("one");在同一时间执行操作mocked object时,它会记住您的操作。因此,当您这样做时verify(mockedList).add("one");,它会验证add被调用mockedList的参数one

希望你能有所作为。

于 2012-10-22T20:03:04.660 回答
3

您希望测试FooA 类的某个方法调用BarB 类对象的某个方法。换句话说,您正在测试 A 类。在测试期间,您模拟了 B 类。然后将此模拟对象传递给A 类(取决于 A 类的实际工作方式)。当您的测试运行Foo类 A 的方法时,您期望在Bar类 B 的模拟上调用该方法。通过调用verifyBar方法,在该Foo方法测试之后,您可以检查该Foo方法是否实际工作正常——即它调用Bar

于 2012-10-22T22:06:34.553 回答
1

mockito 的 verify 方法是验证方法调用次数,如果调用时间为 1,我们可以省略这个参数,见 Mockito 源码 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 方法执行一次

于 2012-11-05T03:15:27.337 回答
0

实际上,在您的示例中,这很明显,但验证方法调用的主要思想出现在实际代码测试期间 - 想象一些代码执行方法调用,例如:

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

为了测试它,您将传递模拟服务对象,但有时您想验证为该调用(或调用次数)传递的特定参数值,因此您将像在示例中一样使用验证。

于 2012-10-22T20:45:10.550 回答