java - 如何使用 Mockito 测试 CompletableFuture 类的 handle() 方法?
问题描述
我有以下代码:
SendEmailRequest request = getEmailMeta(toEmail, fromEmail, subject, htmlBody);
return sesAsyncClient.sendEmail(request)
.handle((res, exp) -> {
if (exp != null || res.messageId()==null || res.messageId().isEmpty()) {
return false;
}
return true;
});
}catch (Exception e){
return CompletableFuture.completedFuture(false);
}
getEmailMeta()
是一个帮助函数,它返回一个SendEmailRequest
对象,并且工作正常。
sesAsyncClient.sendEmail(request)
类型SESAsyncClient
返回CompletableFuture<SendEmailResponse>
对象,然后将其馈送到句柄函数中。现在我正在尝试模拟sesAsyncClient
对象,以便我可以在不实际调用服务的情况下测试它的功能。
我写了以下模拟语句
Mockito.when(sesAsyncClient.sendEmail(any(SendEmailRequest.class)))
.thenReturn(CompletableFuture.completedFuture(SendEmailResponse.builder().messageId(null).build()));
问题是,控制流永远不会进入handle
函数,而只是直接进入catch
语句。关于如何评估手柄中的双功能的任何帮助?
谢谢
编辑:
假设我将fromEmail
字段getEmailMeta
作为""
(空字符串)传递。第一行不会有任何错误,即构造SendEmailRequest
对象。但是,当在下一行request
中输入时,并且不使用 handle(),我得到一个错误,然后该语句捕获了这个异常。但如果存在,那么我无法在方法内的所有行上看到覆盖工具中的绿线,除了输入参数。请参阅随附的屏幕截图。sendEmail
SESAsyncClient: CompletionException: "From" field cannot remain empty
catch
handle()
handle()
解决方案
推荐阅读
- html - How to fix Component-Streching when using vh with flexbox?
- amazon-web-services - 通过过滤源字段上的数据,在弹性搜索 AWS 中查询分页数据的 POST 请求正文
- java - 从 RetrofitBuilder 中的 SharedPreferences 获取 BASE_URL
- matlab - 在绘图顶部绘制集群条指示器
- excel - 工作表名称更改时如何从文件夹中已关闭的工作表中复制数据?
- javascript - 如何将现有的 html 元素附加到另一个元素?
- entity-framework-core - EF 为何试图同时保存数千个实体?
- laravel - 为什么我的 laravel 安装程序版本还是 2.1.0?
- c# - 如何在 Dapper Delete Query 中使用 IN 子句作为 GUID 列表
- java - Admob 高级原生广告导致单击 A RecyclerView 中的项目时崩溃