首页 > 解决方案 > 使用 HttpURLConnection 使用 Mockito 进行单元测试

问题描述

我知道以前有人问过这个问题,我尝试遵循,但它仍然不适合我。我必须在 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);
  }

}

标签: spring-bootjunitmockito

解决方案


doReturn(connection).when(getdata).getTheData(any());

当 getData 应该返回 StringBuilder 时,如何让它返回连接。

你能尝试正确地提问吗?此代码有效

doReturn(sb).when(getdata).getData(any());  //this is where error raised
URL url = new URL("http://anyhost.com");
StringBuilder response = getdata.getData(url.toString());

假设您正在通过 init 或注释正确初始化模拟


推荐阅读