【问题标题】:how to capture JDBCConnectionException using Junit and Mockito?如何使用 Junit 和 Mockito 捕获 JDBCConnectionException?
【发布时间】:2021-12-12 02:08:43
【问题描述】:
我有一个方法,其中包含以下代码,它将订单对象保存到 orderStatus jpa 存储库,我有一个 try catch 方法,它应该捕获 JDBC 连接异常。
如何使用 Junit 和 mockito 测试这个场景?
try {
orderStatusRepository.save(newOrderStatus);
} catch (JDBCConnectionException ex) {
);
【问题讨论】:
标签:
java
spring
jpa
junit
mockito
【解决方案1】:
如果代码的目标是测试如果 JDBCConnectionException 被抛出,它会被捕获而不是传播,我建议使用 Mockito 模拟 orderStatusRepository:
when(orderStatusRepository.save(newOrderStatus))
.thenThrow(JDBCConnectionException.class);
然后执行测试,检查方法是否正常返回,是否访问了mock对象方法(抛出异常):
verify(orderStatusRepository).save(newOrderStatus);
请注意,如果 save 方法没有返回任何内容,则需要对它进行一些不同的模拟:
doThrow(JDBCConnectionException.class)
.when(orderStatusRepository).save(newOrderStatus);
【解决方案2】:
按照以下代码测试您的代码是否存在 JDBC 连接异常。
@MockBean
private OrderStatusRepository orderStatusRepository;
@Test
public void jdbcConnectionExceptionTest() {
try{
when(orderStatusRepository.save(newOrderStatus))
.thenThrow(JDBCConnectionException.class);
orderStatusRepository.save(newOrderStatus);
} catch (Exception e) {
assertTrue(e instanceof JDBCConnectionException);
}
}