我有两个类:模拟继承的最终方法
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”不要抵制标题:-) –