mockito在void方法中捕获异常

093gszye  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(772)

我有这个方法:

public void deleteTableEsiti() throws Exception {
        try{
            EsitiDAO esitiDAO =  new EsitiDAO();
            int deletedEsiti = esitiDAO.deleteTableEsiti(em);

        }
        catch(Exception e ){
            log.error(e);
        }
        finally{
            em.close();
        }
    }

我正在尝试做一个包含catch异常的测试。我已经试过很多次了,但我不能用mockito来掩盖这句话。
这是我写的测试:

@Test(expected=Exception.class)
    public void mockException(){
        ServiceG service = Mockito.mock(ServiceG.class);
         try {
            Mockito.doThrow(Exception.class).when(service).deleteTableEsiti();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        };
        //Mockito.when(service.deleteTableEsiti()).thenThrow(new Exception());
    }

我总是遇到以下错误:[error]失败:[error]junit.mockexception预期的异常:java.lang.exception
线路不在测试范围内。

k4emjkb1

k4emjkb11#

首先,你的方法 deleteTableEsiti() 从不抛出任何异常。它捕捉并记录它,但总是正常返回。如果希望方法抛出异常,请不要捕获它,或者捕获它并抛出一个封装原始异常的自定义异常。
单元测试实际上并不调用mock方法 deleteTableEsiti() 无论如何,因为它所做的只是设置一个模拟规则,以便在调用该方法时抛出异常(您从不调用该方法)。
所以,打电话之后 Mockito.when ,您应该在单元测试中调用(或执行调用)该方法。

相关问题