Mockito简明教程

Posted ryanlikecode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mockito简明教程相关的知识,希望对你有一定的参考价值。

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简明教程的主要内容,如果未能解决你的问题,请参考以下文章

Mockito与PowerMock的使用基础教程

mockito简单教程

使用强大的 Mockito 测试框架来测试你的代码

mockito简单教程

Mockito简明教程

Mockito教程