![](/img/trans.png)
[英]Can any one explain in which case we use PowerMockito.when() and PowerMockito.doReturn()
[英]PowerMockito is calling the method when I use doReturn(..).when(…)
我是PowerMockito的新手,有一種我不明白的行為。 以下代碼解釋了我的問題:
public class ClassOfInterest {
private Object methodIWantToMock(String x) {
String y = x.trim();
//Do some other stuff;
}
public void methodUsingThePrivateMethod() {
Object a = new Object();
Object b = methodIWantToMock("some string");
//Do some other stuff ...
}
}
我有一個類,其中包含一個我想要模擬的私有方法,名為methodIWantToMock(String x)
。 在我的測試代碼中,我正在做以下事情:
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassOfInterest.class)
public class ClassOfInterestTest {
@Test
public void someTestMethod() {
ClassOfInterest coiSpy = PowerMockito.spy(new ClassOfInterest());
PowerMockito.doReturn(null).when(coiSpy, "methodIWantToMock", any(String.class));
coiSpy.methodUsingThePrivateMethod();
//Do some stuff ...
}
}
根據上面的代碼,PowerMockito應該簡單地返回一個空時methodIWantToMock
被稱為內methodUsingThePrivateMethod()
當我運行上面的測試。 然而,實際發生的是當運行此命令時: PowerMockito.doReturn(...).when(...)
, PowerMockito實際上正在調用methodIWantToMock
然后!! 它為什么這樣做? 在這個階段,我只想指定在coiSpy.methodUsingThePrivateMethod();
時最終調用私有方法時應如何模擬私有方法coiSpy.methodUsingThePrivateMethod();
線運行。
所以我想出了一個適合我的解決方案。 我沒有使用spy
,而是使用mock
然后告訴PowerMockito在我的mock
對象中調用methodUsingThePrivateMethod()
時調用真實方法。 它基本上和以前一樣做,但只是使用mock
而不是spy
。 這樣,PowerMockito最終不會調用我試圖使用PowerMockito.doReturn(...).when(...)
來控制其行為的私有方法PowerMockito.doReturn(...).when(...)
。 這是我修改過的測試代碼。 我更改/添加的行標記為:
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassOfInterest.class)
public class ClassOfInterestTest {
@Test
public void someTestMethod() {
//Line changed:
ClassOfInterest coiMock = PowerMockito.mock(new ClassOfInterest());
//Line changed:
PowerMockito.doReturn(null).when(coiMock, "methodIWantToMock", any(String.class));
//Line added:
PowerMockito.when(coiMock.methodUsingThePrivateMethod()).thenCallRealMethod();
coiSpy.methodUsingThePrivateMethod();
//Do some stuff ...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.