码迷,mamicode.com
首页 > 其他好文 > 详细

Mockito简明教程

时间:2018-12-07 20:50:19      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:pre   使用   ret   ati   ever   实现类   div   三方   state   

Mockito

在开发中,我们经常会依赖同事或者第三方提供的接口,如果依赖的接口无法正常返回,比如该接口正在修复,或者网络异常无法调用第三方接口,那么对依赖该接口的开发会造成很大影响。

这时我们可能会想到模拟该接口以提供正常的返回值,用来继续当前的工作。

使用Mockito可以帮助我们解决这个问题。Mockito是进行Mock测试的一个框架,使用一个虚拟的Mock对象来模拟现实中比较复杂的对象。

其主要目标用来模拟复杂接口的实现:
比如

LinkedList mockedList = mock(LinkedList.class);

 //模拟mockList行为
 when(mockedList.get(0)).thenReturn("first");
 when(mockedList.get(1)).thenThrow(new RuntimeException());

通过when函数来执行mockList的行为: 当获取第0个元素时,返回 first;获取第1个元素时,抛出RuntimeException异常。

举个例子:

数据库查询时,ResultSetHandle需要通过Statement接口的实现类来获得数据库查询的结果;如果要实现Statement接口相对来说比较复杂,那么可以使用Mock出一个虚拟的实现来进行ResultSetHandler的测试。

这里创建一个简单的demo来进行演示:

  • 建立一个Statement接口:
public interface Statement {

    String query();
}
  • 再建立一个ResultSetHandler类,其方法handlerResultSets需要一个实现Statement接口的类
public class ResultSetHandler {

    public void handlerResultSets(Statement statement) {
        String queryStr = statement.query ();
        System.out.println (queryStr);
    }
}
  • 建立测试类:使用Mockito创建一个Statement接口的模拟实现类,传入需要调用的方法,可以很方便的对ResultSetHandler进行测试,解除了对Statement实现类的依赖,
public class MockTest {


    public static void main(String[] args) {

        // 使用mock模拟Statement接口行为,这里假设执行查询,返回的结果为test
        Statement imock = Mockito.mock (Statement.class);
        Mockito.when (imock.query ()).thenReturn ("test");
        // spy用来模拟一个对象
        ResultSetHandler useMock = Mockito.spy (ResultSetHandler.class);
        useMock.handlerResultSets (imock);
    }
}

小结

本文使用Mockito的stubbing实现了简单接口,为调用该接口的类提供了一个模拟对象,还有很多高级特性可以参考Mockito官网进行学习

了解更多请关注微信公众号:

技术分享图片

Mockito简明教程

标签:pre   使用   ret   ati   ever   实现类   div   三方   state   

原文地址:https://www.cnblogs.com/ryanLikeCode/p/10084462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!