• mockito


    1. 为什么使用Mock?

    • 依赖外部服务
    • TDD 部分依赖未实现
    • 测试实现分离
    • 单元测试的思路就是我们想在不涉及依赖关系的情况下测试代码。这种测试可以让你无视代码的依赖关系去测试代码的有效性。

    2. mock优点

    • 提前创建测试; TDD(测试驱动开发)

    • 团队可以并行工作

      提供文档后,测试人员即可写测试用例
      
    • 你可以创建一个验证或者演示程序。

      在进行可行性分析时,创建系统原型,为 决定项目接下来是否要进行,提供了有力的基础,但最重要的还是提供了实际的设计决策。 
      
    • 为无法访问的资源编写测试

      防火墙、需要认证才能访问的外部服务,使用mock替代
      
    • Mock 可以分发给用户

      在有些情况下,某种原因你需要允许一些外部来源访问你的测试系统,像合作伙伴或者客户。这些原因导致别人也可以访问你的敏感信息,而你或许只是想允许访问部分测试环境。
      
    • 隔离系统
      在没有系统其他部分的影响下测试系统单独的一部分。由于其他系统部分会给测试数据造成干扰,影响根据数据收集得到的测试结论。使用mock你可以移除掉除了需要测试部分的系统依赖的模拟。

    3. 常用Mock框架比较

    mock framework

    4. 为什么使用Mockito?

    相比Api 简单,更加面向对象

    5. 简单示例

    //given
    List<String> mockedList = Mockito.mock(List.class);
    //when
    // 设置mock对象的行为 - 当调用其get方法获取第0个元素时,返回"one"
    Mockito.when(mockedList.get(anyInt())).thenReturn("one").thenReturn("cc");
    
    // 使用mock对象 - 会返回前面设置好的值"one",即便列表实际上是空的
    String str = mockedList.get(0);
    
    Assert.assertTrue("one".equals(str));
    Assert.assertTrue(mockedList.size() == 0);
    
    // 验证mock对象的get方法被调用过,而且调用时传的参数是0
    Mockito.verify(mockedList,Mockito.atMost(2)).get(anyInt());
    
    Mockito.doReturn("ccc").when(mockedList).get(1);
    //then
    Assert.assertTrue("ccc".equals(mockedList.get(1)));
    

    6. 自己实现例子模拟mockito行为

    mymockito

    7. 常用Api

    • mock方法

    创建代理对象,对象的返回值为对应类型的默认值

    • doAnswer, 处理返回值

    • verify 校验

  • 相关阅读:
    电脑分辨率与pc端页面布局
    webpack打包优化并开启gzip
    JS继承实现的几种方式
    angular项目使用Swiper组件Loop时 ng-click点击事件失效处理方法
    浅谈JSONP (vue-jsonp组件 XXXtoken:报错处理)
    vue项目webpack打包后图片路径错误
    页面渲染过程详解
    vscode调试html页面,及配置说明
    跨域请求cookie获取与设置问题
    HTTP 错误 500.21
  • 原文地址:https://www.cnblogs.com/dragonfei/p/6795265.html
Copyright © 2020-2023  润新知