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

mst*_*rom 35 java mocking mockito

我无法弄清楚为什么doNothing不能为此工作?有任何想法吗?

@Captor
ArgumentCaptor<GenericClass<someOtherClass>> captor;
...
Mockito.doNothing().when(mockObject.methodToStub(captor.capture()));
Run Code Online (Sandbox Code Playgroud)

错误是:

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

Bri*_*ice 66

这个存根是错误的:

doNothing().when(mockObject.methodToStub(captor.capture())); // wrong
Run Code Online (Sandbox Code Playgroud)

methodToStub(...)必须在whenif 之外使用这种API样式(它应该只包含模拟):

doNothing().when(mockObject).methodToStub(captor.capture()); // correct
Run Code Online (Sandbox Code Playgroud)

然而,这些评论:

  1. doNothing 是mock的void方法的默认值.
  2. 您可以使用BDDMockito,使您的代码的别名是真实的点菜行为驱动开发


Pau*_*ner 8

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

最直接的方法是:

verify(mockObject).methodToStub(captor.capture());
Run Code Online (Sandbox Code Playgroud)

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

如果由于某种原因你还需要打电话doNothing,你应该注意括号位置.它应该如下所示:

doNothing().when(mockObject).methodToStub(any());
Run Code Online (Sandbox Code Playgroud)

或者doNothing().when(mockObject).methodToStub(captor.capture());