我想用什么时候(间谍).thenAnswer(新答案()) 但似乎然后答案只在模拟而不是间谍上工作。 我想使用间谍,因为我只想存根特定的方法。
有没有办法对间谍对象做出回答?
答案 0 :(得分:6)
正如官方documentation所述,有可能,有时甚至建议:
暗中监视真实物体的重要问题!
有时使用(对象)咒语间谍是不可能或不切实际的。因此在使用间谍时请考虑 doReturn | Answer | Throw()系列方法用于存根。
但是,再次以doc状态:
Stubbing void需要不同于when(Object)的方法,因为 编译器不喜欢括号内的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";
}
});
答案 1 :(得分:2)
看了你的代码后我发现了问题 使用间谍时,我们需要使用
doAnswer.(new Answer<T>() {..}).when(spy).method()
而不是!!!
when(spy.method()).thenAnswer(new Answer<T>() {..})
由于