>我有一个使用 io.vertx.ext.web.client.WebClient
调用外部端点的方法。我无法测试它的处理程序方法。这是需要测试的方法:
public void freshdeskPostRequest(CompletableFuture<ResponseObject> completableFuture, String url, JsonObject jsonObject, String action) {
webClient.postAbs(url)
.putHeader("Content-type", "application/json")
.putHeader(Constants.AUTHORIZATION, freshdeskAuthHandler)
.timeout(fresdeskTimeout)
.sendJsonObject(jsonObject, httpResponseAsyncResult -> {
getFreshdeskResponse(completableFuture, action, httpResponseAsyncResult);
});
}
其中的方法getFreshdeskResponse
需要通过对url
进行模拟调用来进行测试。但是该方法是在处理程序中调用的,所以我不确定如何模拟调用并执行处理程序。我也检查了论坛上的几个答案,并浏览了文档,但没有一个有帮助。请帮忙。我正在使用Junit
,Mockito
作为测试框架。请帮忙。
您可以使用 mockito 库的 ArgumentCaptor 来捕获 lambda 表达式并手动触发 lambda。前任:
@Captor
ArgumentCaptor<SomeHandlerType> captor; // create ArgumentCaptor for handler
SomeHandlerType 是处理程序的类型。然后使用 captor.capture(( 调用 sendJsonObject((,如下所示 -
mockedRequest.sendJsonObject(captor.capture()); // capture the argument
SomeHandlerType handler = captor.getValue(); // get the handler lambda
handler.handle(dummyResponse); // trigger the handler manually