一、背景
现在写单元测试,很多时候是要看单元测试覆盖率的,有时候我们在代码中写了try catch,单测覆盖不到,有些异常又很难通过数据构造,这样就需要用mockito来mock异常,专注于方法逻辑的测试
二、Mockito
1.依赖引入
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.10.0</version>
</dependency>
2.doThrow和thenThrow的区别
- thenThrow之后可以mock返回值不为空的方法,在mock返回值为空的方法时,会编译不通过
- doThrow则对方法的返回值没有要求
三、实战
0.demo
public class Trade {
@Autowired
public TradeData tradeData;
public Double getAmount() {
// xxx
try {
tradeData.getData(bizDate);
} catch(NotFoundException e) {
return null;
}
// xxx
}
// xxx
}
1.mock异常
public class TradeTest {
public void testGetAmount() {
Trade trade = Mockito.mock(Trade.class);
TradeData tradeData = Mockito.mock(TradeData.class); // mock对象
Mockito.doThrow(new NotFoundException()).when(tradeData).getData(Mockito.any()); // mock异常
Double res = trade.getAmount();
System.out.println(res);
Assert.assertNull(res); // 返回值校验,catch的话会返回null
}
}