Mock.thenThrow
首先来修改一下StockService的接口,来增加抛出异常的申明。
public interface StockService { public double getPrice(Stock stock) throws BizException; } |
这里的BizException是继承自RuntimeException的自定义异常
public class BizException extends RuntimeException
这里可以假设,例如在调用这个接口时,出现了没有这个股票或者其它网络通信层面的异常情况,就会抛出自定义的BizException。这样,就会对股票投资组合价值计算的方法提供更好的鲁棒性。
来写一个用例模拟下。
@Test public void testPortfolioStockServiceException(){ //add stocks to the portfolio portfolio.setStocks(stocks); //mock the behavior of stock service to return the value of various stocks when(stockService.getPrice(teslaStock)) .thenThrow( new BizException("1000","stockServiceException")); assertThatThrownBy(() -> portfolio.getMarketValue()) .isInstanceOf(BizException.class) .hasMessageContaining("stockServiceException"); } |
通过 when().thenThrow的方式设置了测试桩,来返回一个自定义异常。
并且通过AssertJ提供的assertThatThrownBy方法来验证了异常类型、异常消息的内容等信息。
通过上述两者的组合,就能实现对异常测试的支持了。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。