我有这个方法:
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
线路不在测试范围内。
1条答案
按热度按时间k4emjkb11#
首先,你的方法
deleteTableEsiti()
从不抛出任何异常。它捕捉并记录它,但总是正常返回。如果希望方法抛出异常,请不要捕获它,或者捕获它并抛出一个封装原始异常的自定义异常。单元测试实际上并不调用mock方法
deleteTableEsiti()
无论如何,因为它所做的只是设置一个模拟规则,以便在调用该方法时抛出异常(您从不调用该方法)。所以,打电话之后
Mockito.when
,您应该在单元测试中调用(或执行调用)该方法。