I need to mock a protected method in the parent class of my class under test but the parent class is in a different package so my test class cannot access that method so I cannot mock it. There's gotta be a solution for this issue without refactoring
I need to use Powermock and Mockito. Here's the JARs
- mockito-all 1.10.8
 - powermock-core 1.6.1
 - powermock-module-junit4 1.6.1
 - powermock-api-mockito 1.6.1
 - junit 4.12
 
This is legacy code so I cannot refactor, but here's the simplified code.
Parent.java
package parent;
public class Parent {
    // Want to mock this protected parent method from different package
    protected String foo() {
        String someValue = null;
        // Logic setting someValue
        return someValue;
    }
}
Child.java
package child;
import parent.Parent;
public class Child extends Parent {
    String fooString = null;
    public String boo() {
        this.fooString = this.foo();
        String booString = null;
        // Logic setting booString
        return booString;
    }
}
ChildTest.java
package child;
import static org.mockito.Mockito.spy;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import parent.Parent;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Parent.class, Child.class })
public class ChildTest {
    // Class Under Test
    Child cut;
    @Before
    public void setUp() throws Exception {
        // Partial mock to mock methods in parent class
        cut = spy(new Child());
    }
    @Test
    public void testBoo() {
        // TODO: Need to mock cut.foo() but can't figure out how.
        // Following gives me this error: The method foo() from the type Parent is not visible
       Mockito.when(((Parent)cut).foo()).thenReturn("mockValue");
        // Test
        cut.boo();
        // Validations
        Assert.assertEquals(cut.fooString, "mockValue");
    }
}