单元测试实战——Mock异常

1,226 阅读1分钟

一、背景

现在写单元测试,很多时候是要看单元测试覆盖率的,有时候我们在代码中写了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
    }
    
}