【问题标题】:Unit test with Mockito using HttpURLConnection使用 HttpURLConnection 使用 Mockito 进行单元测试
【发布时间】: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


【解决方案1】:

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 或注释正确初始化模拟

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2017-11-22
    • 2017-09-19
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多