[英]Mockito Using doAnswer on Spy
我想用什么時候(間諜).thenAnswer(新的答案())但似乎然后答案只在模擬而不是間諜上工作。 我想使用間諜,因為我只想存根特定的方法。
有沒有辦法對間諜對象做出回答?
正如官方文檔中所述,有可能,有時甚至建議:
間諜真實物體的重要問題!
有時,使用(對象)咒語間諜是不可能或不切實際的。 因此在使用間諜時請考慮使用doReturn | Answer | Throw()系列方法進行存根。
但是,正如該文件所述:
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";
}
});
看了你的代碼后我發現問題當使用間諜我們需要使用
doAnswer.(new Answer<T>() {..}).when(spy).method()
並不是 !!!
when(spy.method()).thenAnswer(new Answer<T>() {..})
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.