[英]Java Mockito: Cannot doReturn child classes?
嘗試模擬方法時,出現UnfinishedStubbingException
。 我試圖讓doReturn
返回實現特定接口的類的doReturn
實例。 該接口是被模擬方法的原始返回類型。
這是類結構的示例:
class A {
private C obj;
C getObj() {
return obj;
}
}
class B implements C {
void doCStuff() {}
void doBStuff() {}
}
interface C {
void doCStuff();
}
通過這種結構,我試圖mock A.getObj()
並使其返回mock A.getObj()
的B
實例。
public void test() {
A aObj = Mockito.mock(A.class);
B bObj = Mockito.mock(B.class);
Mockito.doReturn(bObj).when(aObj).getObj(); //throws UnfinishedStubbingException
//Edit:
B newB = (B)aObj.getObj();
newB.doBStuff();
}
問題是,我需要使getObj
返回B
模擬實例,但我不能。 通常,在Java中,我可以從具有返回類型C
的方法中多態返回B
的實例,因為B
實現了C
但是,似乎doReturn
無法返回實現原始返回類型的子類的實例。
我希望我理解這是正確的,但是我做錯了什么嗎?還是可以解決這個問題?
啊,我是個白痴。 原來我嘗試模擬的方法是最終的,而我最初並沒有注意到。 它來自超級班級,我認為那不是最終的。 final方法不能被覆蓋,Mockito無法模擬它們。
這是一個更好的例子:
class A extends D {
...
}
class D {
//Can't mock this.
final Object getObj() { ... }
}
事實證明,您仍然可以通過Mockito多態返回對象,因此對此產生了錯誤的警報。
不知道這是否行得通; 缺少代碼來說明這是否可以解決問題,但也許您可以嘗試以下方法:
final C c = spy(new B());
final A a = spy(new A());
doReturn(c).when(a).getObj();
更完整的答案需要更完整的問題;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.