Testing 如何使Mockito在每次调用mock上的方法时都执行一些操作?

Testing 如何使Mockito在每次调用mock上的方法时都执行一些操作?,testing,methods,mockito,Testing,Methods,Mockito,我试图通过Mockito实现这种行为: 当O类型的对象应用于方法M时,mock应该在O类型的对象上执行另一个方法,并将其自身作为参数传递 毕竟有可能吗?当与Mockito.any组合使用时,您可能会使用doAnswer和的一些组合doAnswer是的一部分,它有助于扩展您可能想要进行的大量模拟 注意,doAnswer用作void函数的示例。对于非void,您可以使用标准的Mockito.when(MOCK.call).then(RESULT) PowerMockito.doAnswer(新org

我试图通过Mockito实现这种行为:

当O类型的对象应用于方法M时,mock应该在O类型的对象上执行另一个方法,并将其自身作为参数传递


毕竟有可能吗?

Mockito.any组合使用时,您可能会使用
doAnswer
的一些组合
doAnswer
是的一部分,它有助于扩展您可能想要进行的大量模拟

注意,
doAnswer
用作void函数的示例。对于非void,您可以使用标准的
Mockito.when(MOCK.call).then(RESULT)

PowerMockito.doAnswer(新org.mockito.stubing.Answer(){
@凌驾
公共对象应答(InvocationMock调用)抛出Throwable{
//在这里做任何反对的事。
返回null;
}).when(MOCKOBJECT.methodCall(Mockito.any(O.class));

然后在模拟对象上执行有用的
doAnswer
功能,使用
when
可以将其分配给任何特定对象类的catch(而不必指定它应该期望的确切对象)。使用
Mockito.any(class.class))
作为参数的一部分,它让Mockito知道在使用传入的任何指定类型的对象进行方法调用时触发doWhatever。

您不需要PowerMockito,您只需在(MOCKOBJECT.methodCall(ANY(O.class)))时写入即可。然后再回答(new Answer(){…});很好的理解,有时候很难清晰地提取示例,因为我所有的模拟测试都只是静态/非静态调用的集合。不要使用PowerMockito。据我所知,这里不需要它。Mockito有一个
doAnswer
方法,它正好满足您的需要。这里给出的解决方案(除了使用
Mockito.doAnswer
而不是
PowerMockito.doAnswer
)对您来说应该可以正常工作;如果不行,请查看Mockito文档中的
doAnswer
。Tavian给出的解决方案,在
when
thenAnswer
时使用
也可以,如果您想要存根的方法不是无效的。
doAnswer()
是Mockito-core-1.10.19.jar的一部分,无需使用PowerMockito
PowerMockito.doAnswer(new org.mockito.stubbing.Answer<Object>() {
    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        //Do whatever to Object O here.
        return null;
    }).when(MOCKOBJECT.methodCall(Mockito.any(O.class)));