Mockito问题 - 当Stubber中的(java.lang.Void)无法应用于void时

时间:2014-08-11 18:22:17

标签: java mocking mockito

我无法弄清楚为什么doNothing无效?有什么想法吗?

@Captor
ArgumentCaptor<GenericClass<someOtherClass>> captor;
...
Mockito.doNothing().when(mockObject.methodToStub(captor.capture()));

错误是:

  

Exception: when(java.lang.Void) in Stubber cannot be applied to void

2 个答案:

答案 0 :(得分:53)

这个存根错了:

doNothing().when(mockObject.methodToStub(captor.capture())); // wrong
如果使用此API样式,

methodToStub(...)必须在when之外(它应该只包含模拟):

doNothing().when(mockObject).methodToStub(captor.capture()); // correct

但是,你的评论是:

  1. doNothing是模拟的void方法的默认值。
  2. 您可以使用BDDMockito别名来使您的代码真实àla行为驱动开发

答案 1 :(得分:6)

虽然你问为什么没有什么不起作用,但我知道你实际上想要捕获methodToStub的参数。

最直接的方法是:

verify(mockObject).methodToStub(captor.capture());

如果你只是想让你模拟在void方法调用上什么都不做,请记住什么都不做是mocks上void方法的默认

如果由于某种原因你还需要拨打doNothing,你应该注意括号位置。它应该是这样的:

doNothing().when(mockObject).methodToStub(any());

或     doNothing()时(mockObject).methodToStub(captor.capture());