Java:使用Mockito模拟ResultSet
这篇文章展示了如何使用Mockito模拟java.sql.ResultSet
。 它可用于帮助单元测试代码对ResultSet
(例如ResultSetExtractor
)执行操作,而无需依赖外部数据源。
您可以通过提供列名列表和2D数据数组来创建MockResultSet
。 例如:
var rs = MockResultSet.create(new String[] { "name", "age" }, //columnsnew Object[][] { // data{ "Alice", 20 },{ "Bob", 35 },{ "Charles", 50 }});
MockResultSet
的代码如下所示(也可以在我的GitHub Repository中找到 )。 请注意,我仅模拟了诸如next
, getString
和getObject
类的一些方法,但是通过遵循相同的模式来模拟其余方法非常容易。
public class MockResultSet {private final Map<String, Integer> columnIndices;private final Object[][] data;private int rowIndex;private MockResultSet(final String[] columnNames,final Object[][] data) {// create a map of column name to column indexthis.columnIndices = IntStream.range(0, columnNames.length).boxed().collect(Collectors.toMap(k -> columnNames[k],Function.identity(),(a, b) ->{ throw new RuntimeException("Duplicate column " + a); },LinkedHashMap::new));this.data = data;this.rowIndex = -1;}private ResultSet buildMock() throws SQLException {final var rs = mock(ResultSet.class);// mock rs.next()doAnswer(invocation -> {rowIndex++;return rowIndex < data.length;}).when(rs).next();// mock rs.getString(columnName)doAnswer(invocation -> {final var columnName = invocation.getArgumentAt(0, String.class);final var columnIndex = columnIndices.get(columnName);return (String) data[rowIndex][columnIndex];}).when(rs).getString(anyString());// mock rs.getObject(columnIndex)doAnswer(invocation -> {final var index = invocation.getArgumentAt(0, Integer.class);return data[rowIndex][index - 1];}).when(rs).getObject(anyInt());final var rsmd = mock(ResultSetMetaData.class);// mock rsmd.getColumnCount()doReturn(columnIndices.size()).when(rsmd).getColumnCount();// mock rs.getMetaData()doReturn(rsmd).when(rs).getMetaData();return rs;}/*** Creates the mock ResultSet.** @param columnNames the names of the columns* @param data* @return a mocked ResultSet* @throws SQLException*/public static ResultSet create(final String[] columnNames,final Object[][] data)throws SQLException {return new MockResultSet(columnNames, data).buildMock();}
}
翻译自: https://www.javacodegeeks.com/2018/09/java-mocking-resultset-using-mockito.html
Java:使用Mockito模拟ResultSet相关推荐
- mockito java_Java:使用Mockito模拟ResultSet
mockito java 这篇文章展示了如何使用Mockito模拟java.sql.ResultSet . 它可用于帮助对ResultSet进行操作的单元测试代码(例如ResultSetExtract ...
- Mockito:一个强大的用于Java开发的模拟测试框架
介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...
- java字符串的运用代码_java – 如何使用mockito模拟一个字符串?
我需要模拟一个测试场景,其中我调用String对象的getBytes()方法,我得到一个UnsupportedEncodingException. 我试图实现那使用下面的代码: String nonE ...
- java mock void_如何使用Mockito模拟void方法 - How to mock void methods with Mockito
问题: How to mock methods with void return type? 如何用void返回类型模拟方法? I implemented an observer pattern bu ...
- 如何使用Mockito模拟void方法
如何用void返回类型模拟方法? 我实现了一个观察者模式,但是我不能用Mockito模拟它,因为我不知道怎么做. 我试图在互联网上找到一个例子,但没有成功. 我的课看起来像这样: public cla ...
- mockito模拟依赖注入_Mockito间谍–部分模拟
mockito模拟依赖注入 We can use Mockito Spy to partial mock an object. When we spy on an object, the real m ...
- Java单元测试之模拟利器-使用PowerMock进行Mock测试
首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...
- mockito_使用Mockito模拟自动装配的字段
mockito 依赖注入是诸如Spring和EJB之类的Control容器反转的非常强大的功能. 将注入的值封装到私有字段中总是一个好主意. 但是,自动连线字段的封装会降低可测试性. 我喜欢Mocki ...
- Java 使用 URLConnection 模拟 Http Get和Post 提交
2019独角兽企业重金招聘Python工程师标准>>> Java 使用 URLConnection 模拟 Http Get和Post 提交. 1.URLConnectionHelpe ...
最新文章
- MySQL中的编码方式错误
- 07.suggester简述
- 50 岁再次创业:我希望 20 年后还能解 Bug
- 人类首张黑洞照片发布,像甜圈圈,顺便恭喜爱因斯坦
- Win10和Ubuntu20.04双系统启动引导项修复指南
- 6.gloox 之 MessageHandler
- 应聘互联网公司的简历应该是怎么样的?(转载)
- ICT技术认证都有哪些?他们的区别是什么?
- magisk核心功能模式是什么_HRT-Lin-荣耀V9 B347 自动接听Xposed 机型 Magisk 桌面设置 dpi等功能...
- Android页面跳转(Intent)
- s2 安恒 漏洞验证工具_Struts2漏洞检查工具2018版本V2.1.exe
- 念整数(你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si)
- ElasticSearch-7.5.1集群3master-3data-3client环境搭建
- gitlab安装--数据备份迁移恢复
- android 防止屏幕误碰,小米11带来硬件防误触解决方案,彻底解决曲面屏误触问题...
- 汽车的一些简写名词(后续会继续更新)
- 关于信息安全服务资质认证规范及实施规则换版的通知
- 后端向前端通过 fastJson 传递 Json 到前端无法显示或者显示位 [object object] 问题
- 卧兔网络开启全球红人分销功能,WotoHub上线Shopify应用商店!
- 发布订阅者模式和观察者模式的区别
热门文章
- Codeforces Gym - 100917 部分题解
- 跟我学 Java 8 新特性之 Stream 流(二)关键知识点
- DML、DDl、DQL实战
- 使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
- ArrayList基操
- python参数_python参数的介绍
- javabean与json转换(fastjson与jackson两个版本)
- java项目:永和大王项目_Java项目:书评
- android wtf_WTF连接池
- switch字符串jdk_JDK 12 Early Access Build 12中的原始字符串文字支持