У меня есть метод, который создает экземпляр HttpClientRequest и связывает с ним обработчик.
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
}
});}
Клиентский запрос к сторонней службе. Как мне написать модульный тест для вызова различных предложений обработчика? Я использую 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);
}
Вы можете предположить, что все переменные проверяются как требуется.
Я бы хотел, чтобы тест вызывал метод request.handler
in sendRequest
. Подтверждено, что весь поток выполняется до request.end
.