【问题标题】: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) {
          
           
          );

【问题讨论】:

  • 看看junit中的asserThrow API

标签: 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多