要检查与 mock 的交互次数,其中方法调用中的参数属于某种类型,可以这样做
mock.someMethod(new FirstClass());
mock.someMethod(new OtherClass());
verify(mock, times(1)).someMethod(isA(FirstClass.class));
这将通过对 isA
的调用,因为 someMethod
被调用两次,但只有一次带有参数 FirstClass
然而,这种模式在使用 ArgumentCaptor 时似乎是不可能的,即使 Captor 是为特定参数创建的 FirstClass
这行不通
mock.someMethod(new FirstClass());
mock.someMethod(new OtherClass());
ArgumentCaptor<FirstClass> captor = ArgumentCaptor.forClass(FirstClass.class);
verify(mock, times(1)).someMethod(captor.capture());
它说模拟被调用了不止一次。
有没有办法在捕获参数以供进一步检查的同时完成此验证?
原文由 Hilikus 发布,翻译遵循 CC BY-SA 4.0 许可协议
我建议使用 Mockito 的 Hamcrest 集成为其编写一个好的、干净的匹配器。这允许您将验证与对传递的参数的详细检查结合起来:
匹配器通常会导致更具可读性的测试和更有用的测试失败消息。它们也往往是非常可重用的,您会发现自己构建了一个为测试您的项目而量身定制的库。最后,您还可以使用 JUnit 的
Assert.assertThat()
将它们用于正常测试断言,因此您可以双重使用它们。