zoukankan      html  css  js  c++  java
  • 简记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(....);
        
  • 相关阅读:
    [Leetcode] Merge Intervals
    [Leetcode] Sort Colors
    junit
    DBUnit的使用
    xml简介---来自百度百科
    今天开始深入学习XML
    Java 用Myeclipse部署项目基础坏境搭建
    properties配置文件读取方法
    Java web做服务器之间的通信方法
    Java Socket简单的客服端及其服务器端
  • 原文地址:https://www.cnblogs.com/zwwang/p/15084911.html
Copyright © 2011-2022 走看看