我有以下代码:
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>
对象,然后将其馈送到handle函数中。现在,我正在尝试模拟sesAsyncClient
对象,以便可以在不实际调用服务的情况下测试其功能。
我写了下面的模仿语句
Mockito.when(sesAsyncClient.sendEmail(any(SendEmailRequest.class)))
.thenReturn(CompletableFuture.completedFuture(SendEmailResponse.builder().messageId(null).build()));
问题在于,控制流永远不会进入handle
函数,而只会直接进入catch
语句。关于如何评估手柄中的双功能有任何帮助吗?
谢谢
编辑:
假设我将fromEmail
中的getEmailMeta
字段作为""
(空字符串)传递。第一行不会有任何错误,即构造SendEmailRequest
对象。但是,当在下一行中将request
输入到sendEmail
且不使用handle()时,我得到了一个错误SESAsyncClient: CompletionException: "From" field cannot remain empty
,然后是{ {1}}语句捕获了这个异常。但是,如果有catch
,那么除了输入参数之外,在handle()
方法内的所有行上,覆盖工具中都看不到绿线。请参阅随附的屏幕截图。