刷我di卡,异常测试

发表于:2020-8-14 11:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:软件测试那些事    来源:软件测试那些事

  Mock.thenThrow
  异常处理的测试系统测试中是比较麻烦的事情。譬如要制造网络中断、通讯超时、输入异常值等来触发预定义的异常。但是在单元测试中,通过Mockito可以非常低成本地来触发异常情况,实现对于异常测试的支持。
  首先来修改一下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),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号