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