在子类中模拟/测试超类调用.它可能吗?

Him*_*dar 4 unit-testing seam easymock jmock mockito

我正在寻找一个解决方案来模拟子类ButtonClicker中的超级调用.

Class Click {
      public void buttonClick() throws java.lang.Exception { /* compiled code */ }     } 

Class ButtonClicker extends Click { 
    @Override
    public void buttonClick() throws Exception {

        super.buttonClick();
    } }
Run Code Online (Sandbox Code Playgroud)

Mai*_*kov 6

使用继承会降低代码的可测试性.考虑替换继承代表团和嘲笑的委托.

提取接口IClicker

interface IClicker {
    void buttonClick();
}
Run Code Online (Sandbox Code Playgroud)

IClicker在Clicker课堂上实施.如果您正在使用第三方代码,请考虑使用适配器模式

重写您的ButtonClicker以下内容:

class ButtonClicker implements IClicker {
    Clicker delegate;

    ButtonClicker(Clicker delegate) {
        this.delegate = delegate;
    }

    @Override
    public void buttonClick() throws Exception {
        delegate.buttonClick();
    }

}
Run Code Online (Sandbox Code Playgroud)

现在只需将mock作为构造函数参数传递:

Clicker mock = Mockito.mock(Clicker.class);
// stubbing here
ButtonClicker buttonClicker = new ButtonClicker(mock);
Run Code Online (Sandbox Code Playgroud)