简记Mock测试框架

时间:2021-07-31
本文章向大家介绍简记Mock测试框架,主要包括简记Mock测试框架使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

MOCK (模拟,模仿)

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.5.11</version>
    <scope>test</scope>
</dependency>
  1. mock的目的和作用: 模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开,类似于容器。

  2. Mockito实现原理: 通过CGLib在运行时为每一个被mock的类或者对象动态生成一个代理对象,返回预先设计的结果。

  3. Stub打桩: 即在Mockito中使用when().thenReturn()这种语法来定义对象方法和参数输入,并且制定结果输出

    • ​ 对于static和final方法,不能进行打桩操作,
    • 如果连续对同一个方法打桩,则只会使用最新的一次。

    集成Mockito的基本步骤

    1. 标记被Mock的类或者对象,生成代理对象
    2. 通过Mockito API定制代理对象的行为
    3. 调用代理 对象的方法,获得预先设计的结果

    Mockito框架的具体步骤

    • 初始化mock的对象
    1. 在测试类前注解 @RunWith(MockitoJUnitRunner.class)

    2. 在@Mock注解的对象后,以及@Test注解之前声明
      @Before
       public void setUp( ) throws Exception{
           MockitoAnnotations.initMocks(this);
            
       }
      
      • 上述两种初始化方式二选一即可
  • mock对象的使用

    1. Mockito.when(...).thenReturn(...); //打桩, 当when中的方法以及指定的输入执行时,会直接返回指定的内容,而其他被mock的方法以及其他输入都会直接返回默认值;

    2. Mockito.when (...).thenCallRealMethod(... );
      //此时会执行被Mock对象中的真实方法并且按照其实际执行返回结果
      
    3. 验证调用次数:

      Mockito.verify(mockObject,Mockito.times()).methodName(anyString());  
      //验证methodName方法执行了多少次
      
    4. 验证调用顺序:

      InOrder inOrder = Mockito.inOrder(mockObject);
      inOrder.verify(mockObject).methodName();
      inOrder.verify(mockObject).methodName();
          
      
    5. 局部模拟

       通过Mockito.spy() 生成可局部模拟的对象,其余情况都保持真实情况,例如有一个类Hello,有
       Hello spy=Mockito.spy(new Hello() )  //生成局部模拟对象
       Mockito.when(spy.method2("sss")).thenReturn("gg");   //实际执行,但是返回的时候被替换了
       assertEquals("gg", spy.method2("sss"));   //模拟执行并返回
       assertEquals("s2", spy.method2("s"));    //按照真实情况执行并返回
       
      

      并不执行方法,而是按照指定返回值返回

      Mockito.doReturn(....).when(spy).method(....);
      

原文地址:https://www.cnblogs.com/zwwang/p/15084911.html