簡體   English   中英

Mockito在間諜上使用doAnswer

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM