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