java - 在 Java 的 ifPresent() 中使用 AssertJ 的 assertThat 函数 Optional
问题描述
如何删除 中的 try-catchassertThat
块ifPresent()
?编译器只给了我一个使用assertThat
in 的选项ifPresent()
,那就是用 try-catch 块包围它。也不允许再次抛出异常。
@Test
public void testPostRequestThenSaveResponse()
throws HttpStatusCodeException, JsonProcessingException, IllegalArgumentException, IOException {
// Should success.
try {
ServiceAssignmentImpl.httpPostDeliveryOrder(url, token, sod, customerSite, customer, item, uom, driver)
.ifPresent((deliveryOrderResponse) -> {
// increase DO number for next test.
deliveryOrderNum++;
DeliveryOrderResponse savedDOResponse = deliveryOrderResponseRepository
.save(deliveryOrderResponse);
DeliveryOrderResponse fetchedDOResponse = deliveryOrderResponseRepository
.findOne(savedDOResponse.getId());
try {
assertThat(json.write(fetchedDOResponse))
.isEqualTo(objectMapper.writeValueAsString(deliveryOrderResponse));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
} catch (HttpStatusCodeException e) {
// need getResponseBodyAsString() to see detail error message.
System.out.println("** HttpStatusCodeException: " + e.getResponseBodyAsString());
throw e;
}
}
解决方案
只需使用.get()
,如果响应不存在,您的测试不应通过,因此无需使其成为条件。
在没有 MCVE 的情况下,我已经尽可能地调整了您的代码。
@Test
public void testPostRequestThenSaveResponse()
throws HttpStatusCodeException, JsonProcessingException, IllegalArgumentException, IOException {
// Should success.
try {
var = deliveryOrderResponseServiceAssignmentImpl.httpPostDeliveryOrder(url, token, sod, customerSite, customer, item, uom, driver).get()
// increase DO number for next test.
deliveryOrderNum++;
DeliveryOrderResponse savedDOResponse = deliveryOrderResponseRepository
.save(deliveryOrderResponse);
DeliveryOrderResponse fetchedDOResponse = deliveryOrderResponseRepository
.findOne(savedDOResponse.getId());
assertThat(json.write(fetchedDOResponse))
.isEqualTo(objectMapper.writeValueAsString(deliveryOrderResponse));
} catch (HttpStatusCodeException e) {
// need getResponseBodyAsString() to see detail error message.
System.out.println("** HttpStatusCodeException: " + e.getResponseBodyAsString());
throw e;
}
}
推荐阅读
- java - 在java中实现微批处理
- web - 使用 AMP 构建网站
- google-apps-script - 如何在应用脚本中实现 goBack 函数
- java - 在 Tomcat 服务器上运行 WAR 文件时出错
- jquery - 从多个来源获取 JSON
- node.js - 我应该每个线程都有一个新的 MongoDB 连接吗
- c - 如何控制具有多个互斥锁和条件的 pthread?
- java - 无法使用 jsp 和 servlet 打印上传文件的名称
- laravel - Laravel 将 ID 分配给 Zurb Foundation 模式
- jakarta-ee - 从属性文件中读取 dbURL、用户和密码