美文网首页
Mockito简介和代码示例

Mockito简介和代码示例

作者: 测试你个头 | 来源:发表于2017-03-02 13:38 被阅读0次

    Mockito简介和示例

    Mockito也是一个开源的mock工具包,和EasyMock不同的时,它不需要录制、播放这些动作,语法上更灵活,可读性更强

    官网:mockito
    官方文档:mockito.html

    范例代码

    1.maven工程的话,首先引入pom包:

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.7.12</version>
        <scope>test</scope>
    </dependency>
    

    2.测试类中引入静态资源:

    import static org.mockito.Mockito.*; 
    

    3.支持以下特性:(源码来自官方文档)

    • 验证行为有没有被调用过
    //create mock
    List mockedList = mock(List.class);
    //use mock object
    mockedList.add("one");
    mockedList.clear();
    //验证add方法是否在前面被调用了一次,且参数为“one”。clear方法同样。
    verify(mockedList).add("one");
    verify(mockedList).clear();
    //下面的验证会失败。因为没有调用过add("two")。
    verify(mockedList).add("two");
    
    • 插桩:使mock对象的方法返回期望值
      对于没有stub过的有返回值的方法,会返回默认值(0,false,null等)
    //stubbing。当get(0)被调用时,返回"first". 方法get(1)被调用时,抛异常。
    when(mockedList.get(0)).thenReturn("first");
    when(mockedList.get(1)).thenThrow(new RuntimeException());
    

    重复stub

    //重复stub,以最后一次为准,如下将返回"second":
    when(mockedList.get(0)).thenReturn("first");
    when(mockedList.get(0)).thenReturn("second");
    //如下表示第一次调用时返回“first”,第二次调用时返回“second”。可以写n个。
    when(mockedList.get(0)).thenReturn("first").thenReturn("second");
    如果实际调用的次数超过了stub过的次数,则返回最后一次stub的值。
    例如第三次调用get(0)时,则会返回"second".
    
    • 参数匹配
      如果想实现get(任意整数)时,都返回null,如何做?
    when(mockedlist.get(anyInt())).thenReturn(null);
    

    有许多的arguments matcher,参考More ArgumentMatchers
    Argument matcher支持定制

    • 验证方法被调用了特定次数/至少x次/最多x次/从未被调用
    //是否add("twice")被调用了两次。
    verify(mockedList, times(2)).add("twice");
    //验证add("twice")被调用了至少一次。以及其他。
    verify(mockedList, atLeastOnce()).add("twice");
    verify(mockedList, atLeast(2)).add("twice");
    verify(mockedList, atMost(5)).add("twice");
    verify(mockedList, never()).add("twice");
    
    • 调用方法时抛出异常
    doThrow(new RuntimeException()).when(mockedList).clear();
    
    • 验证顺序
      一个mock对象的方法以特定顺序被调用多次
      多个mock对象以特定顺序被调用多次
    inOrder.verify(firstMock).add("was called first");
    inOrder.verify(secondMock).add("was called second");
    

    其中,插桩(stubbing)mock对象的返回值是测试中最常用到的

    相关文章

      网友评论

          本文标题:Mockito简介和代码示例

          本文链接:https://www.haomeiwen.com/subject/tmxfgttx.html