首页 > 解决方案 > 如何在 vert.x java 中对处理程序进行单元测试?

问题描述

我有一个方法可以使用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作为测试框架。请帮忙。

标签: javaunit-testingmockitovert.x

解决方案


您可以使用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

推荐阅读