我需要在我测试的类的父类中模拟受保护的方法,但父类在不同的包中。我认为解决方案是使用PowerMockito.spy()
但我无法实例化Child类型,因为它是抽象的。在没有重构的情况下,必须有解决这个问题的方法。
这是依赖关系。
<dependency org="org.powermock" name="powermock-core" rev="1.6.4"/>
<dependency org="org.powermock" name="powermock-module-junit4" rev="1.6.4"/>
<dependency org="org.powermock" name="powermock-api-mockito" rev="1.6.4"/>
这是遗留代码,所以我无法重构,但这里是简化代码。
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 abstract class Child extends Parent {
String fooString = null;
public String boo() {
this.fooString = this.foo();
String booString = null;
// Logic setting booString
return booString;
}
}
答案 0 :(得分:0)
您可以使用PowerMock来模拟非公开的方法
@RunWith(PowerMockRunner.class)
public class ChildTest {
@Test
public void testBoo() throws Exception {
Child child = PowerMockito.mock(Child.class);
PowerMockito.when(child, "foo").thenReturn("someValue");
PowerMockito.doCallRealMethod().when(child).boo()
String boo = child.boo();
//assert here whatever you want to assert
}
}