簡體   English   中英

Mockito在存根時從超類調用真實方法

[英]Mockito calls real method from superclass when stubbing

我遇到了Mockito嘗試在存根時調用真實方法的問題。 我認為這可能與繼承該方法有關。 這是我系統外部的組件,不能做太多事情。 但是讓我們看一下代碼

AbstractRpcClient abstractRpcClient = mock(AbstractRpcClient.class);
doNothing().when(abstractRpcClient).callOnce(anyString(), anyVararg());

由於callOnce在其他一些對象上調用方法,因此我在第二行中獲得了NPE。 AbstractRpcClient繼承自另一個抽象類,但是該類是本地程序包,因此我什至無法將其強制轉換為存根。

有什么我可以做的嗎? 我如何才能在不調用真實方法的情況下使該方法不執行任何操作或引發異常。

我必須在測試中擴展此類並重寫方法callOnce嗎? 當然可以,但是還有其他解決方案嗎?

最小示例:

package external.component;

public abstract class ClassToMock extends SuperClass {

}


abstract class SuperClass {
    public void callOnce(String method, Object... params) {
        throw new RuntimeException("We shouldn't be here");
    }
}

測試班

package mypackage

import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyVararg;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;

public class Testclass {

    @Test
    public void test() {
        external.component.ClassToMock classToMock = mock(external.component.ClassToMock.class);
        doNothing().when(classToMock).callOnce(anyString(), anyVararg());
    }

}

當然,在示例中, callOnce方法拋出RuntimeException

它看起來像Mockito中的錯誤,實際上已經被報告,並且應該在一年前就已修復:

https://github.com/mockito/mockito/issues/168

我在1.9.5版和最新的1.10.19版中得到了相同的(中斷)行為。

我建議您使用Mockito引發該錯誤。

作為臨時解決方法,有幾種選擇:

  • 公開課
  • 添加public void callOnce() { super.callOnce(); } public void callOnce() { super.callOnce(); }在子類中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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