Used to call an private method, just a wrapper on Java Reflection API's

// Example Source Class
public class ExampleClass {
    private int getHeight() {
        // Lets say we have a generic method which provides different result base on the provided id
        final CustomClass customClassInstance = new CustomClass();
        return customClass.getHeight();

We can use Whitebox.invokeMethod() to execute that method, here an example:

public class ExampleClassTest {

    private ExampleClass classUnderTest;

    public void setUp() throws Exception {
        // Create constructor of ExampleClass
        classUnderTest = new ExampleClass();

    public void getHeight_shoudReturnHeightOfView() throws NoSuchMethodException {
        final int expectedHeight = 100;
        // Given
        final CustomClass mckCustomClass = Mockito.mock(CustomClass.class);
        // Make sure you match exact parameters while mocking (same as we do for Mockito.mock statements).
        // There is also withArguments(first, second, ....)
        // and withAnyArguments() for cases when you dont care for arguments passed.

        final int actualResult = Whitebox.invokeMethod(classUnderTest, "getHeight");;

        Assert.assertEquals(expectedHeight, actualResult);

Note: you should not call invokeMethod() unnecessarily, try to follow code execution flow to get to any private method.

Last updated