• Mockito -- 入门篇


    Mockito是一种mock工具/框架。我理解EasyMock有点过时了,Mockito是现在比较流行的。

    什么是mock?说的直白一点,大家都知道unit test应该是尽可能独立的。对一个class的unit test不应该再和其他class有任何交互。

    现在有一个类,扫描一个目录并将找到的文件都上传到FTP server。该类对于不同的FTP响应(找不到FTP server 或 上传成功,或上传失败),有一些后续操作。

    在写这个类的UT时,我们就必须虚构出来一个FTP对象。这样在UT中,这个虚构的对象能够代替真正的FTP,对被测试类的调用做出一定的响应。从而知道被测试类是否正确的调用了FTP并做出一些正确的期望的响应。从而达到测试的目的。

    mock可以模拟各种各样的对象,从而代替真正的对象做出希望的响应。

    关于mock的概念和EasyMock,可以参考:

     Mock object and EasyMock framework

    http://blog.csdn.net/OnlyQi/archive/2011/04/26/6364885.aspx

    官网:http://mockito.org/

     一篇很好的入门文章:

    http://blog.csdn.net/huoshuxiao/archive/2010/12/30/6107835.aspx

     一些稍微复杂且实用一点的例子:

    http://gojko.net/2009/10/23/mockito-in-six-easy-examples/

    下面介绍mockito的基本使用方法。

     如前面所说,我们需要创建一个mock对象来代替真的对象。

    因此,

    模拟对象是第一步。模拟对象使用mock();

    指定mock对象被调用时的返回值是第二步,比如指定让mockFTP对象第一次被调用时返回"找不到FTP server"。这一步一般称为stubbing。一般是when(mockedList.get(0)).thenReturn("first")的样子。

    验证被测试类是否正确工作是第三步,使用verify()。例如,验证当mockFTP对象返回"找不到FTP server"时,测试代码是否按要求重试。

    然后测试就完成啦~~

    模拟对象:

    1. // 模拟LinkedList 的一个对象  
    2. LinkedList mockedList = mock(LinkedList.class);   
    3.   
    4. // 此时调用get方法,会返回null,因为还没有对方法调用的返回值做模拟   
    5. System.out.println(mockedList.get(999));  

    模拟方法调用的返回值:

      比如

    1. // 模拟获取第一个元素时,返回字符串first。  给特定的方法调用返回固定值在官方说法中称为stub。
    2. when(mockedList.get(0)).thenReturn("first");   
    3.   
    4. // 此时打印输出first   
    5. System.out.println(mockedList.get(0));  

    模拟方法调用抛出异常:

    1. // 模拟获取第二个元素时,抛出RuntimeException  
    2. when(mockedList.get(1)).thenThrow(new RuntimeException());   
    3.   
    4. // 此时将会抛出RuntimeException  
    5. System.out.println(mockedList.get(1));  
     没有返回值类型的方法也可以模拟异常抛出:

    doThrow(new RuntimeException()).when(mockedList).clear();

    模拟调用方法时的参数匹配:

    1. // anyInt()匹配任何int参数,这意味着参数为任意值,其返回值均是element  
    2. when(mockedList.get(anyInt())).thenReturn("element");   
    3.   
    4. // 此时打印是element   
    5. System.out.println(mockedList.get(999)); 

    模拟方法调用次数:

    1. // 调用add一次   
    2. mockedList.add("once");   
    3.   
    4. // 下面两个写法验证效果一样,均验证add方法是否被调用了一次  
    5. verify(mockedList).add("once");   
    6. verify(mockedList, times(1)).add("once");  
     还可以通过atLeast(int i)和atMost(int i)来替代time(int i)来验证被调用的次数最小值和最大值。

    结束~很简单吧。
    这篇文章基本上是转帖,下篇文章将介绍如何在代码里使用Mockito,最后介绍mockito的大部分功能。
    原文地址:https://blog.csdn.net/OnlyQi/article/details/6396646
  • 相关阅读:
    JavaScript事件基础知识总结【思维导图】
    浮动广告 相关源码
    网页设计中常用的Web安全字体
    WEB 字体
    js文件被浏览器缓存的思考
    HTML5 LocalStorage
    CXF 中自定义SOAPHeader
    CXF拦截器(Interceptor)LoggingInInterceptor
    WebService注解汇总
    spring websocket 和socketjs实现单聊群聊,广播的消息推送详解
  • 原文地址:https://www.cnblogs.com/jpfss/p/10972462.html
Copyright © 2020-2023  润新知