美文网首页
Mockito初探(一)—— 初识

Mockito初探(一)—— 初识

作者: Cloneable | 来源:发表于2019-05-05 23:30 被阅读0次

    之前的工作中对业务接口的测试仅仅停留在postman请求一下,验证一下接口是否出现异常而已,单元测试基本属于空白,新工作中对单元测试的要求较高,于是在完成接口的代码之外还需要完成相应的单元测试,在单元测试中为避免第三方接口对测试结果的影响,遂使用了Mockito,在这样的情况下结识了Mockito。

    Mockito的应用场景如上所述,而官网肯定会对自己的框架大肆夸赞一番,可以写出更加优美的测试代码,可阅读性高的测试代码以及清晰的验证错误结果云云,这些在使用Mockito时都可以自己感受,也可以点击跳转Mockito官网亲自喝下这碗官网鸡汤。

    Mockito的使用也十分简单,只要引入mockito-core的jar包就可以使用,建议配上junit食用效果更佳,接下来展示两个Mockito的基本使用例子作为此章节的结束。

    • verify基本使用
      在使用Mockito之前先引入Mockito相关方法
    import static org.mockito.Mockito.*;
    
    @Test
    public void simpleVerifyTest() {
        // create a mock of List
        List mockList = mock(List.class);
    
        // call add and clear method of mocked List
        mockList.add("123");
        mockList.clear();
    
        // verify interaction of mocked List
        verify(mockList).add("123");
        verify(mockList).clear();
    }
    

    verify可以验证被mock的对象是否进行了相应的操作,如果未进行相应的操作会抛出异常,例如将verify(mockList).add("123")修改为verify(mockList).add("12")将会获得如下错误信息。

    verify失败时异常信息
    • 基本的stubbing
    @Test
    public void simpleStubbingTest() {
        // create a mock of ArrayList
        ArrayList mockList = mock(ArrayList.class);
    
        // stubbing
        when(mockList.get(0)).thenReturn("first element");
        when(mockList.get(1)).thenThrow(new RuntimeException("mockList.get(1)"));
    
        // prints "first element"
        System.out.println(mockList.get(0));
    
        // throws RuntimeException
        System.out.println(mockList.get(1));
    
        // prints null
        System.out.println(mockList.get(999));
    
        verify(mockList).get(0);
    }
    

    其实从代码上也看得出,所谓的stubbing其实就是对被mock对象的相应操作配置了相应的影响,当被mock对象进行相应操作时就会得到相应的响应,当mock对象的操作没有被stubbing时调用相应操作会返回适当的默认值。

    另外对已经被stubbing的操作是不推荐使用verify的,因为使用verify意味着对操作的结果是不关心的,那相应操作就没必要进行stubbing,如果对操作的结果关注,那操作结果肯定在verify之前已经获得,也就没有必要使用verify了。


    本章节代码可以点击跳转GitHub查看

    相关文章

      网友评论

          本文标题:Mockito初探(一)—— 初识

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