我想知道描述中可能的内容以及如何操作。
我知道你可以调用原始方法,然后像这样做答案:
when(presenter, "myMethod").doAnswer(<CUSTOMANSWER>)
但我想以不同的方式订购它们,先做CUSTOMANSWER然后调用原始方法。
答案 0 :(得分:2)
对于粉丝,实际上可以同时callRealMethod
和 doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
invocationOnMock.callRealMethod(); // this one
return null;
}
}).when(subject).method(...);
......
code
答案 1 :(得分:1)
你在Mockito中看不到when(...).doAnswer()
。相反,您会看到以下任一情况,其中包括您正在描述的"call real method"行为。像往常一样使用Mockito存根,Mockito将选择与调用中的方法调用和参数值匹配的最新调用链,并在链中执行一次操作直到最终操作(它将会之后为所有电话做。
// Normal Mockito syntax assuming "myMethod" is accessible. See caveat below.
when(presenter.myMethod()).thenAnswer(customAnswer).thenCallRealMethod();
// ...or...
doAnswer(customAnswer).doCallRealMethod().when(presenter).myMethod();
也就是说,a deficiency in the PowerMockito API这使得这很困难,因为在第一次doAnswer
调用所有后续调用后,您将获得正常的Mockito Stubber实例,而不是PowerMockitoStubber实例。 bug 599被误解了,所以暂时你还是要自己制作演员。
((PowerMockitoStubber) doAnswer(customAnswer).doCallRealMethod())
.when(presenter, "myMethod");