Java Mockito在间谍上使用doAnswer

Java Mockito在间谍上使用doAnswer,java,junit,mockito,Java,Junit,Mockito,我想使用when(spy).thenAnswer(new Answer()) 但似乎答案只适用于模拟,而不适用于间谍。 我想使用spy,因为我只想使用特定的方法 有没有办法回答间谍对象的问题?如官方所述,这是可能的,有时甚至建议: 重要的是,我已经掌握了监视真实物体的方法 有时,用when(Object)来对付间谍是不可能或不切实际的。因此,在使用间谍时请考虑 doReturn | Answer | Throw()存根方法家族 但是,再次作为国家: 短截孔需要与(对象)时不同的方法,因为 编译器

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

有没有办法回答间谍对象的问题?

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

重要的是,我已经掌握了监视真实物体的方法

有时,用when(Object)来对付间谍是不可能或不切实际的。因此,在使用间谍时请考虑 doReturn | Answer | Throw()存根方法家族

但是,再次作为国家:

短截孔需要与(对象)时不同的方法,因为 编译器不喜欢括号内的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();   
MyObject spy=spy(MyObject);
doAnswer(新答案){
@凌驾
公共对象应答(InvocationMock调用)抛出Throwable{
返回null;
}
}).when(spy.notify();
或者如果它不是无效的:

when(spy.toString()).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
        return "this";
    }
});
when(spy.toString())。然后回答(new-Answer()){
@凌驾
公共字符串应答(invocationMock调用)抛出Throwable{
返回“this”;
}
});

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

doAnswer.(new Answer<T>() {..}).when(spy).method()
doAnswer.(新答案(){..}).when(间谍).method()
而不是

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

谢谢

很抱歉我没有写它,但我在(spy.method())时使用了一个方法。然后回答(new Answer()),你的方法()是无效的还是返回了什么?这个答案救了我。。。从昨天开始,我一直在努力想知道为什么是什么时候。。。这是一个头痛。。。我刚刚尝试了doAnswer().when(),效果非常好……请注意,我的方法是使用参数spy.method(arg)