Using inheritance reduces the ability to validate your code. Consider replacing the inheritance of delegation and make fun of the delegate.
Remove IClicker Interface
interface IClicker { void buttonClick(); }
Add IClicker to the Clicker class. In case you work with third-party code, consider the adapter template
Rewrite ButtonClicker as follows:
class ButtonClicker implements IClicker { Clicker delegate; ButtonClicker(Clicker delegate) { this.delegate = delegate; } @Override public void buttonClick() throws Exception { delegate.buttonClick(); } }
Now just pass the layout as a constructor parameter:
Clicker mock = Mockito.mock(Clicker.class); // stubbing here ButtonClicker buttonClicker = new ButtonClicker(mock);
source share