如何在回答Spy对象后在Mockito中执行原始方法

时间:2016-05-10 12:29:01

标签: mockito powermockito

我想知道描述中可能的内容以及如何操作。

我知道你可以调用原始方法,然后像这样做答案:

when(presenter, "myMethod").doAnswer(<CUSTOMANSWER>)

但我想以不同的方式订购它们,先做CUSTOMANSWER然后调用原始方法。

2 个答案:

答案 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");