我尝试模拟父类的 protected 方法。出于这个原因,我使用 Mockito
和 PowerMockito
。我的父类。
public class Parent {
protected int foo() {
throw new RuntimeException("Do not invoke this method.");
}
}
我的 child 类(class)。
public class Child extends Parent {
protected int boo() {
return super.foo();
}
}
和测试类。
@RunWith(PowerMockRunner.class)
@PrepareForTest({Parent.class, Child.class})
public class ChildTest {
@Mock
private Child childMock;
@Before
public void before() {
initMocks(childMock);
}
@Test
public void shouldInvokeProtectedMockedMethod() throws Exception {
/* Given */
PowerMockito.doReturn(500).when(childMock, "foo");
/* When */
childMock.boo();
/* Then */
Mockito.verify(childMock, Mockito.times(1)).boo();
Mockito.verify(childMock, Mockito.times(1)).foo();
}
@After
public void after() {
Mockito.reset(childMock);
}
}
当我运行它时出现这个错误
Wanted but not invoked:
child.foo();
-> at com.test.ChildTest.shouldInvokeProtectedMockedMethod(ChildTest.java:36)
However, there were other interactions with this mock:
child.boo();
-> at com.test.ChildTest.shouldInvokeProtectedMockedMethod(ChildTest.java:33)
我做错了什么?
最佳答案
如果你想检查 foo() 方法是否真的被调用,你既不需要 Mockito,也不需要 PowerMockito。
捕获运行时异常会通知您已调用 foo() 方法。
package foo.bar;
import org.junit.Test;
public class ChildTest {
/**
* child.boo() calls super.foo(), then throws a RuntimeException.
*/
@Test(expected = RuntimeException.class)
public void shouldInvokeProtectedMethod() {
Child child = new Child();
child.boo();
}
}
关于java - 如何模拟父类的 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30362790/