• 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 校验

  • 相关阅读:
    UI进阶--手势识别
    UI进阶--响应者链条
    UI进阶--触摸事件的产生和传递
    UI进阶--触摸事件
    UI进阶--Quartz2D和触摸事件的简单使用:手势解锁
    UI进阶--Quartz2D和触摸事件的简单使用:简易涂鸦板
    UI进阶--Quartz2D绘制图形的基本使用
    Mac 自定义"终端"快捷键
    GCD内部实现--摘自《iOS与OS X多线程和内存管理》
    Add Binary -- leetcode
  • 原文地址:https://www.cnblogs.com/dragonfei/p/6795265.html
Copyright © 2020-2023  润新知