繁体   English   中英

为Java http clientbuilder编写Mock测试类

[英]Writing Mock test class for java http clientbuilder

我是第一次使用Java编写单元测试用例,并且试图弄清楚如何为http客户端模拟测试用例。 我正在尝试测试以下功能:

public HttpResponse getRequest(String uri) throws Exception {
        String url = baseUrl + uri;

        CloseableHttpClient httpClient =  HttpClientBuilder.create().build();
        HttpGet get = new HttpGet(url);
        get.setHeader(AUTHORIZATION_HEADER, authorization);
        get.setHeader(ACCEPT_HEADER, APPLICATION_JSON);
        HttpResponse response = httpClient.execute(get);
        return response;
    }

我不想实际调用该URL并访问服务器,我只想尝试模拟我可以从服务器获得的所有响应,例如500或200或套接字错误。 我已经研究了Mockito库来模拟Java函数,但是我已经读过Mockito不能用于静态方法。

有人可以指导我如何为此编写单元测试吗? 另外,由于在函数内部创建了HTTPClient,因此这是测试的好习惯吗?

在这种情况下,您无法模拟HttpClient,因为您是在不建议使用的方法中创建HttpClient,而是在这种情况下应将依赖项注入HttClient。

下面是代码:

public class Test1 {
    private HttpClient httpClient ;
    Test1(HttpClient httpClient){
        this.httpClient = httpClient;
    }

    public HttpResponse getRequest(String uri) throws Exception {
        HttpGet get = new HttpGet(uri);
        HttpResponse response = httpClient.execute(get);
        return response;
    }
}

测试班

public class Test1Test {

    @Test
    public void testGetRequest() throws Exception {
        final HttpClient mockHttpClient = Mockito.mock(HttpClient.class);
        final Test1 test1 = new Test1(mockHttpClient);
        final HttpResponse mockHttpResponse = Mockito.mock(HttpResponse.class);
        final StatusLine mockStatusLine = Mockito.mock(StatusLine.class);
        Mockito.when(mockHttpClient.execute(ArgumentMatchers.any(HttpGet.class))).thenReturn(mockHttpResponse);
        Mockito.when(mockHttpResponse.getStatusLine()).thenReturn(mockStatusLine);
        Mockito.when(mockStatusLine.getStatusCode()).thenReturn(200);
        final HttpResponse response = test1.getRequest("https://url");
        assertEquals(response.getStatusLine().getStatusCode(), 200);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM