【发布时间】:2019-07-08 17:34:11
【问题描述】:
我有一个创建 HttpClientRequest 实例并将 Handler 关联到它的方法。
public void sendRequest(String requestId, File file, Message<A> message) {
final HttpClientRequest request = getHttpClientRequest();
request.putHeader(HttpHeaders.CONTENT_TYPE.toString(), FORM_DATA);
request.putHeader(HttpHeaders.ACCEPT.toString(), APPNEXUS_JSON_HEADER);
request.putHeader(HttpHeaders.CONTENT_TRANSFER_ENCODING.toString(), "binary");
final Buffer buffer = this.getBody(file.getAbsolutePath());
request.putHeader(HttpHeaders.CONTENT_LENGTH.toString(), String.valueOf(buffer.length()));
request.handler(httpClientResponse -> {
switch (httpClientResponse.statusCode()) {
case Status.SC_OK:
httpClientResponse.bodyHandler(body -> {
// Do something
});
break;
case Status.TOO_MANY_REQUESTS:
// Do something
break;
default:
// Do something
}
});}
客户端请求是针对第 3 方服务的。我应该如何编写单元测试来调用处理程序的不同子句?我正在使用 Mockito 来模拟任务。
到目前为止我写的测试,
public void testSomething (TestContext testContext) { final Async async = testContext.async(); Mockito.when(httpClientRequest.exceptionHandler(Mockito.any())).thenReturn(httpClientRequest); Mockito.when(httpClientRequest.putHeader(Mockito.anyString(), Mockito.anyString())).thenReturn(httpClientRequest); Mockito.doAnswer(invocation -> { return httpClientResponse; }).when(httpClientRequest).end(Mockito.any(Buffer.class)); Mockito.when(routingContext.response()).thenReturn(httpServerResponse); Mockito.when(routingContext.statusCode()).thenReturn(200); Mockito.when(routingContext.getBody()).thenReturn(buffer); JsonObject jsonObject = Mockito.mock(JsonObject.class); Mockito.when(buffer.toJsonObject()).thenReturn(jsonObject); Mockito.when(jsonObject.mapTo(Mockito.any())).thenReturn(appnexusBulkSyncResponse); Mockito.when(file.getAbsolutePath()).thenReturn("testpath"); String requestId = "req-1"; JsonObject uploadRequest = new JsonObject(); uploadRequest.put("requestId", requestId); vertx.eventBus().consumer("test-bus", (Message<A> message) -> { syncClient.sendRequest(requestId, file, message); }); vertx.eventBus().send("test-bus", uploadRequest, event -> { async.complete(); }); async.await(TIMEOUT); }
您可以假设所有变量都根据需要进行了模拟。
我希望测试在sendRequest 方法中调用request.handler。验证整个流程执行到request.end。
【问题讨论】:
-
显示到目前为止您尝试过的内容
-
@Coder 我的错,添加了目前写的测试用例。
标签: java unit-testing mockito vert.x