java - 如何在 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
作为测试框架。请帮忙。
解决方案
您可以使用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
推荐阅读
- excel - 在这种情况下如何使用 COUNTIF 和 SUBTOTAL?
- xamarin.forms - CrossGeeks GoogleClientPlugin 覆盖 2 个插件的 OpenUrl
- javascript - Electron 的 showOpenDialog 中的过滤器仅返回数组中的第一个对象
- java - 两台电脑之间的Socket连接
- wordpress - 无论如何在 WordPress 的 do_settings_fields 上使用 colspan
- xml - 我们可以比较两个 Spotfire 仪表板并在解压缩创建 XML 文件时将人类语言的差异作为 dxp 文件吗?
- java - Android:SQLite 无法在索引处绑定参数,因为索引超出范围
- css - Flexbox:等高行?
- qt - 如何使用来自外部 QML 文件的内部 QML 类型?
- python - 需要从宽转换为长