51Testing软件测试论坛

标题: 刷我di卡,异常测试 [打印本页]

作者: lsekfe    时间: 2020-8-18 09:48
标题: 刷我di卡,异常测试
 Mock.thenThrow
  异常处理的测试在系统测试中是比较麻烦的事情。譬如要制造网络中断、通讯超时、输入异常值等来触发预定义的异常。但是在单元测试中,通过Mockito可以非常低成本地来触发异常情况,实现对于异常测试的支持。
  首先来修改一下StockService的接口,来增加抛出异常的申明。
  1. public interface StockService {

  2.   public double getPrice(Stock stock) throws BizException;

  3.   }
复制代码
这里的BizException是继承自RuntimeException的自定义异常
  public class BizException extends RuntimeException
  这里可以假设,例如在调用这个接口时,出现了没有这个股票或者其它网络通信层面的异常情况,就会抛出自定义的BizException。这样,就会对股票投资组合价值计算的方法提供更好的鲁棒性。
  来写一个用例模拟下。
  1. @Test

  2.   public void testPortfolioStockServiceException(){
  3.   //add stocks to the portfolio
  4.   portfolio.setStocks(stocks);
  5.   //mock the behavior of stock service to return the value of various stocks
  6.   when(stockService.getPrice(teslaStock))
  7.   .thenThrow( new BizException("1000","stockServiceException"));
  8.   assertThatThrownBy(() -> portfolio.getMarketValue())
  9.   .isInstanceOf(BizException.class)
  10.   .hasMessageContaining("stockServiceException");
  11.   }
复制代码
通过 when().thenThrow的方式设置了测试桩,来返回一个自定义异常。  并且通过AssertJ提供的assertThatThrownBy方法来验证了异常类型、异常消息的内容等信息。
  通过上述两者的组合,就能实现对异常测试的支持了。









欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2