Использование наследования снижает тестируемость вашего кода.Попробуйте заменить наследование на делегирование и смоделируйте делегат.
Извлеките интерфейс IClicker
interface IClicker {
void buttonClick();
}
Реализуйте IClicker
в Clicker
классе.В случае, если вы работаете со сторонним кодом, рассмотрите возможность использования Pattern Adapter
Перепишите ваш 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);