【发布时间】:2020-07-25 15:32:37
【问题描述】:
我知道以前有人问过这个问题,我尝试关注,但它仍然不适合我。 我必须在 Mockito 中执行此操作。 我对 Mockito 的了解是菜鸟。
当我执行时,我得到一个失败跟踪
org.mockito.exception.misusing.NullInsteadOfMockException:
不确定我缺少什么以及如何解决它。我已经搜索了几天,但我没有任何运气。
任何帮助将不胜感激。
这是我在 Spring Boot 2 中使用 HTTPUrlConnection 进行外部调用的代码。 它工作正常。
@Component
public class GetData {
@Value("{lookupUrl}
private String url;
public StringBuilder getData(String str) {
String httpUrl = url + str;
StringBuilder sb = new StringBuilder();
try {
URL link = new URL(url);
HttpURLConnection conn = (HttpURLConnection) link.openConnection();
InputStream is = conn.getInputStream();
InputStreamReader inputReader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(inputReader);
String line;
while ((line = br.readline()) != null {
sb.append(line);
}
br.close();
conn.disconnect();
}
catch(Exception e) {
e.getStatckTrace();
}
return sb;
}
}
// 这是我的单元测试
public class DataTest {
@Spy
GetData getdata;
@Mock
HttpURLConnection connection;
@Test
public void getDataTest() {
StringBuilder sb = new StringBuilder();
sb.append("test data");
try{
doReturn(connection).when(getdata).getTheData(any()); //this is where error raised
URL url = new URL("http://anyhost.com");
sb = getdata.getTheData(url.toString());
doReturn(sb).when(connection).getInputStream();
}
catch(Exception e) {
e.getStatckTrace();
}
assertTrue(sb.length() > 1);
}
}
【问题讨论】:
-
doReturn(connection).when(getdata).getTheData(any()); // 当 getData 应该返回 StringBuilder 时,这个如何返回连接
-
要克服该错误,您需要在 junit 4 的测试类上初始化模拟
@RunWith(MockitoJUnitRunner.class)或为 junit 5 初始化@ExtendWith。但是,您的课程无法使用 mockito 进行测试。您无法访问并设置与模拟的连接。也许阅读testing seams
标签: spring-boot junit mockito