我有兩個類:模擬繼承的最終方法
public class BaseClass <T> {
private final T config;
...
@NotNull
public final T getConfig() {
return config;
}
}
public class DerivedClass extends BaseClass<MyConfig> {
...
}
和測試:
...
MyConfig myConfig = mock(MyConfig.class);
DerivedClass child = mock(DerivedClass.class);
when(child.getConfig()).thenReturn(myConfig); // this line generates the error
我得到一個錯誤,getConfig()
被返回null,而不是myConfig
。我還有其他方法調用相同的模擬對象與預期的時間/返回模式,所以我玩弄了多態性。當我刪除了方法的最後限制並在派生類中覆蓋它(只是調用超級版本)時,模擬工作正常。
我不想爲產品測試重新設計產品代碼並降低API的剛性,因此上面的繼承更改不是可接受的解決方案。我怎樣才能調出超類的方法?
「模擬繼承的方法」 - 你總是可以做出關於其出身粗魯的評論,但是這不會是政治上正確的(對不起,couldn」不要抵制標題:-) –