在间谍对象上回答后如何在 Mockito 中执行原始方法
How to execute original method in Mockito after Answer on Spy object
我想知道描述中的事情是否可行以及如何实现。
我知道你可以调用原始方法然后像这样做答案:
when(presenter, "myMethod").doAnswer(<CUSTOMANSWER>)
但我想对它们进行不同的排序,先执行 CUSTOMANSWER,然后调用原始方法。
您永远不会在 Mockito 中看到 when(...).doAnswer()
。相反,您会看到以下任一内容,其中包括您描述的 "call real method" 行为。与 Mockito 存根一样,Mockito 将 select 最近的调用链 匹配调用中的方法调用和参数值,并执行链中的每个操作一次直到最后的操作(它将对之后的所有调用执行此操作。
// Normal Mockito syntax assuming "myMethod" is accessible. See caveat below.
when(presenter.myMethod()).thenAnswer(customAnswer).thenCallRealMethod();
// ...or...
doAnswer(customAnswer).doCallRealMethod().when(presenter).myMethod();
话虽如此, that makes this difficult, because after the first doAnswer
call all subsequent calls you get a normal Mockito Stubber instance rather than a PowerMockitoStubber instance. The bug 599 被误解了,所以目前您仍然需要自己进行转换。
((PowerMockitoStubber) doAnswer(customAnswer).doCallRealMethod())
.when(presenter, "myMethod");
对于追随者,实际上可以同时doAnswer
和callRealMethod
...
doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
invocationOnMock.callRealMethod(); // this one
return null;
}
}).when(subject).method(...);
我想知道描述中的事情是否可行以及如何实现。
我知道你可以调用原始方法然后像这样做答案:
when(presenter, "myMethod").doAnswer(<CUSTOMANSWER>)
但我想对它们进行不同的排序,先执行 CUSTOMANSWER,然后调用原始方法。
您永远不会在 Mockito 中看到 when(...).doAnswer()
。相反,您会看到以下任一内容,其中包括您描述的 "call real method" 行为。与 Mockito 存根一样,Mockito 将 select 最近的调用链 匹配调用中的方法调用和参数值,并执行链中的每个操作一次直到最后的操作(它将对之后的所有调用执行此操作。
// Normal Mockito syntax assuming "myMethod" is accessible. See caveat below.
when(presenter.myMethod()).thenAnswer(customAnswer).thenCallRealMethod();
// ...or...
doAnswer(customAnswer).doCallRealMethod().when(presenter).myMethod();
话虽如此,doAnswer
call all subsequent calls you get a normal Mockito Stubber instance rather than a PowerMockitoStubber instance. The bug 599 被误解了,所以目前您仍然需要自己进行转换。
((PowerMockitoStubber) doAnswer(customAnswer).doCallRealMethod())
.when(presenter, "myMethod");
对于追随者,实际上可以同时doAnswer
和callRealMethod
...
doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
invocationOnMock.callRealMethod(); // this one
return null;
}
}).when(subject).method(...);