![](/img/trans.png)
[英]How can I test a method which invoke protected (unwanted) methods of parent class?
[英]How can I mock protected method of parent class?
我嘗試模擬父類的受保護方法。 出於這個原因,我使用Mockito
和PowerMockito
。 我的父班。
public class Parent {
protected int foo() {
throw new RuntimeException("Do not invoke this method.");
}
}
我的孩子班。
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();
}
}
嘗試這樣的事情:
@Test
public void shouldInvokeProtectedMockedMethod() throws Exception {
int expected = 1;
Child childMock = mock(Child.class);
when(childMock.foo()).thenReturn(expected);
when(childMock.boo()).thenCallRealMethod();
childMock.boo();
org.mockito.Mockito.verify(childMock, org.mockito.Mockito.times(1)).boo();
org.mockito.Mockito.verify(childMock, org.mockito.Mockito.times(1)).foo();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.