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官网进行学习
了解更多请关注微信公众号:
原文地址:https://www.cnblogs.com/ryanLikeCode/p/10084462.html
时间: 2024-11-05 22:06:15