Mockito 在间谍上使用doAnswer



我想使用 when(spy).thenAnswer(new Answer())但似乎 thenAnswer 仅适用于模拟而不是间谍。我想使用间谍,因为我只想存根特定方法。

有没有办法回答间谍对象?

如官方文档中所述,这是可能的,有时甚至是建议的:

间谍真实物体的重要陷阱!

有时使用 when(对象) 来刺杀间谍是不可能的或不切实际的。因此,在使用间谍时,请考虑 返回|答|用于存根的 throw() 系列方法。

但是,正如文档所说:

存根空隙需要与 when(对象) 不同的方法,因为 编译器不喜欢括号内的 void 方法...

你的方法无效吗?

文档中的示例(如果为 void):

doAnswer(new Answer() {
    public Object answer(InvocationOnMock invocation) {
        Object[] args = invocation.getArguments();
        Mock mock = invocation.getMock();
        return null;
    }
}).when(mock).someMethod();

因此,如果方法无效,则应使用以下代码:

MyObject spy = spy(myObject);
doAnswer(new Answer<Object>() {
    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        return null;
    }
}).when(spy).notify();   

或者,如果它不是无效的:

when(spy.toString()).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
        return "this";
    }
});

查看您的代码后,我发现了问题使用间谍时,我们需要使用

doAnswer.(new Answer<T>() {..}).when(spy).method()

而不是!!

when(spy.method()).thenAnswer(new Answer<T>() {..})

谢谢

相关内容

  • 没有找到相关文章

最新更新