[英]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.