PowerMockito.replace()
// Example Source Class
public class ExampleClass extends Screen {
public int getHeaderView() {
// Lets say we have a generic method which provides different result base on the provided id
final TextView textView = findViewById(ViewFactory.text_view);
textView.setText("Header");
final ImageView imageView = findViewById(ViewFactory.image_view);
imageView.setImage(BitmapFactory.getUserProfileImage());
return new HStack(textView, imageView);
}
}@RunWith(PowerMockRunner.class)
@PrepareForTest({
ExampleClass.class
})
public class ExampleClassTest {
private ExampleClass classUnderTest;
@Before
public void setUp() throws Exception {
// Create constructor of ExampleClass
classUnderTest = new ExampleClass();
}
@Test
public void getHeaderView_shoudReturnHStack() throws NoSuchMethodException {
// Given
PowerMockito.replace(View.class.getDeclaredMethod("findViewById", int.class)).with(new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
final int viewId = (int) args[0];
if (viewId == ViewFactory.text_view) {
// return mock of TextView
return Mockito.mock(TextView.class);
} else if (viewId == ViewFactory.image_view) {
// return mock of ImageView
return Mockito.mock(ImageView.class);
}
// else you can call real method as well
return method.invoke(proxy, args);
}
});
// When
final HStack actualResult = classUnderTest.getHeaderView();
Assert.assertNotNull(actualResult);
}
}Last updated