51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3102|回复: 1
打印 上一主题 下一主题

刷我di卡,异常测试

[复制链接]
  • TA的每日心情
    无聊
    13 小时前
  • 签到天数: 937 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2020-8-18 09:48:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     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方法来验证了异常类型、异常消息的内容等信息。
      通过上述两者的组合,就能实现对异常测试的支持了。




    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-25 22:37 , Processed in 0.066819 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表