我正在寻找一种在子类ButtonClicker中模拟超级调用的解决方案。
Class Click {
public void buttonClick() throws java.lang.Exception { /* compiled code */ } }
Class ButtonClicker extends Click {
@Override
public void buttonClick() throws Exception {
super.buttonClick();
} }
最佳答案
使用继承会降低代码的可测试性。考虑用delegation替换继承并模拟委托。
提取界面IClicker
interface IClicker {
void buttonClick();
}
在
IClicker
类中实现Clicker
。如果您正在使用第三方代码,请考虑使用Adapter Pattern重写您的
ButtonClicker
,如下所示:class ButtonClicker implements IClicker {
Clicker delegate;
ButtonClicker(Clicker delegate) {
this.delegate = delegate;
}
@Override
public void buttonClick() throws Exception {
delegate.buttonClick();
}
}
现在只需将模拟作为构造函数参数传递:
Clicker mock = Mockito.mock(Clicker.class);
// stubbing here
ButtonClicker buttonClicker = new ButtonClicker(mock);