[英]Mocking a static Method in Abstract class using Mockito
public abstract class A {
public String method1( String urlString ) {
HTTP HttpURLConnection con = getConnection(url);
.... I use con.getInpurStream() to get the data and return it...
}
public HttpURLConnection getConnection(URL url) {
URL url = new URL(urlString);
return (HttpURLConnection) url.openConnection();
}
}
public class B extends A {
public String method2(String urlString) {
return method1(urlString);
}
}
我正在嘗試使用 JUNIT 和 Mockito 為 Class B 方法 2 編寫單元測試。
我厭倦了這樣的事情:
public class testB {
String urlString = "someValid.url";
String dummyRes = "dummy Response";
InputStream res = new ByteArrayInputStream(dummyRes.getBytes());
B mockB = Mockito.mock(B.class);
HttpURLConnection connection = Mockito.mock(HttpURLConnection.class);
Mockito.when(connection.getInputStream()).thenReturn(res);
Mockito.when(mockB.getConnection(urlString)).thenRetrun(connection);
assertEquals("dummy Response", mockB.method2("someValid.url");
}
我不斷從 url 而不是 dummyRes 獲取實時數據。
請幫忙 /\
編輯1:
刪除了 static 方法。 而且我仍然無法模擬 getConnection() 方法來返回模擬的連接。
編輯2:
將制作 URL object 移動到 getConnection 方法以避免制作新的 URL 以便我可以模擬它並在測試中進行更改。 仍在獲取實時值。
好像應該有這樣的東西
Mockito.when(mockB.getConnection(Mockito.eq("someValid.url" ))).thenReturn(connection);
不能直接模擬 static 方法,對於 mocking static 方法,您需要在 Z935D1142CAEBBEA77 之上使用 PowerMock。
另一種選擇可能是使用 Jmockit 框架。 這可以用來代替使用兩個框架(Mockito 和 PowerMock)。
這是參考,為什么 static 方法的 mocking 不適用於 Mockito -
[更新]:對於連接的模擬問題,
代替
Mockito.when(mockB.getConnection(tempURL)).thenRetrun(connection);
嘗試使用
Mockito.when(mockB.getConnection(any())).thenRetrun(connection);
如果您不想通過任何方法,則可以選擇 mocking URL class 以及openConnection方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.