我正在使用Mockito編寫由其他人實現的代碼的junit測試。 簡化:有沒有一種方法可以讓Mockito從內部類運行窺探對象的殘留方法?
- 有一個外部類和內部類
- 外類保持內部類的一個實例。
- Inner類使用Outer類的方法。
簡化代碼可能看起來是這樣的:
public class Outer {
private Inner inner;
public Outer(){
inner=new Inner();
}
public Inner getInner(){
return inner;
}
public String getOuterName(){
return "outer";
}
public String getOuterNiceName(){
return "name="+getOuterName();
}
public class Inner {
public String getInnerName(){
return getOuterName()+"-inner";
}
}
}
我想存根外類的方法getOuterName()返回方便我的測試值。 要做到這一點,我在對象上「間諜」:
Outer outer=new Outer();
Outer spyOuter=spy(outer);
doReturn("outerspied").when(spyOuter).getOuterName();
現在,如果我叫:
spyOuter.getObjectName();
spyOuter.getOuterNiceName();
的存根方法被調用,在這兩個電話,我得到的字符串:「 outerspied」 和 「NAME = outerspied」
但是如果我打電話:
spyOuter.getInner().getInnerName();
在這種情況下,不會調用stubbed方法,而是最初的方法。我期望「外部內部」,但得到「外部內部」
總結,在窺探的外部對象中,引用「this」指向窺探的實例。 但是對於內部對象來說,對「Outer.this」的引用指向了「不可見」實例。
我不知道我是否做錯了什麼,它是一個錯誤,或者它按照設計工作;問題是:是否有解決方法?
提前
它按照這裏所設計的工作;代理人是你的間諜,但是「內在」並不知道那個間諜。 – fge