我讀這documentation on PowerMockito,它主要有兩個例子:如何完全模擬PowerMockito的課程?
- 懲戒靜態方法
- 部分嘲諷類
,但我想知道如何嘲笑時創建的一整類與new
。 我在找Mockito的mock
方法的PowerMockito版本。這應該能夠用我的生產代碼中的new Foo()
替換爲Mockito mock(Foo.class)
。以下是我已經試過:
import com.PowerMockitoProduction;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.any;
import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(PowerMockRunner.class)
@PrepareForTest(PowerMockitoProduction.class)
public class PowerMockitoTest {
@Test(expected = UnsupportedOperationException.class)
public void test() throws Exception {
HttpClient mock = PowerMockito.mock(HttpClient.class);
when(mock.executeMethod(any(HttpMethod.class))).thenThrow(UnsupportedOperationException.class);
new PowerMockitoProduction().createClient();
}
}
此測試失敗,此:
java.lang.Exception: Unexpected exception, expected<java.lang.UnsupportedOperationException> but was<java.lang.IllegalArgumentException>
這裏是我的生產代碼:
package com;
import org.apache.commons.httpclient.HttpClient;
import java.io.IOException;
public class PowerMockitoProduction {
public void createClient() throws IOException {
HttpClient client = new HttpClient();
client.executeMethod(null);
System.out.println(client);
}
}
用我的調試器,我可以看到client
是不像我預料的那樣是模擬的。
我使用也嘗試:
Object mock = PowerMockito.whenNew(HttpClient.class).withNoArguments().getMock();
但由於某些原因,它返回一個沒有完全構建的模擬。我也試過這樣:
HttpClient mock = PowerMockito.whenNew(HttpClient.class).withNoArguments().thenReturn(mock(HttpClient.class)).getMock();
但是,這給了我在該線路上ClassCastException
。那麼,用PowerMockito完全模擬一個類的正確方法是什麼?
不像這個例子所暗示的,我試圖模擬出HttpClient的原因是我可以在稍後調用verify
。
你說的完全嘲諷列一類的意思。對不起,我經歷了幾次你的問題,但無法理解那部分。 – 2015-02-23 20:47:15
@RohitJain我正在尋找Mockito的'mock'方法的PowerMockito版本。 – 2015-02-23 20:47:52
在'thenReturn()'之後,您不需要調用'getMock()'方法。 – 2015-02-23 20:49:33