这篇文章展示了如何使用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中找到 )。 请注意,我仅模拟了诸如nextgetStringgetObject类的一些方法,但是通过遵循相同的模式来模拟其余方法非常容易。

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相关推荐

  1. mockito java_Java:使用Mockito模拟ResultSet

    mockito java 这篇文章展示了如何使用Mockito模拟java.sql.ResultSet . 它可用于帮助对ResultSet进行操作的单元测试代码(例如ResultSetExtract ...

  2. Mockito:一个强大的用于Java开发的模拟测试框架

    介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...

  3. java字符串的运用代码_java – 如何使用mockito模拟一个字符串?

    我需要模拟一个测试场景,其中我调用String对象的getBytes()方法,我得到一个UnsupportedEncodingException. 我试图实现那使用下面的代码: String nonE ...

  4. 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 ...

  5. 如何使用Mockito模拟void方法

    如何用void返回类型模拟方法? 我实现了一个观察者模式,但是我不能用Mockito模拟它,因为我不知道怎么做. 我试图在互联网上找到一个例子,但没有成功. 我的课看起来像这样: public cla ...

  6. mockito模拟依赖注入_Mockito间谍–部分模拟

    mockito模拟依赖注入 We can use Mockito Spy to partial mock an object. When we spy on an object, the real m ...

  7. Java单元测试之模拟利器-使用PowerMock进行Mock测试

    首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...

  8. mockito_使用Mockito模拟自动装配的字段

    mockito 依赖注入是诸如Spring和EJB之类的Control容器反转的非常强大的功能. 将注入的值封装到私有字段中总是一个好主意. 但是,自动连线字段的封装会降低可测试性. 我喜欢Mocki ...

  9. Java 使用 URLConnection 模拟 Http Get和Post 提交

    2019独角兽企业重金招聘Python工程师标准>>> Java 使用 URLConnection 模拟 Http Get和Post 提交. 1.URLConnectionHelpe ...

最新文章

  1. (深入理解)强化学习中的policy-based和value-based区别是什么?
  2. linux的笔画动态加载,关于Android中GestureOverlayView多笔画的问题
  3. Boost:timer计时器测试程序
  4. oracle 自身连接查询,Oracle 连接查询
  5. 从零开始学前端:grid布局和音频 --- 今天你学习了吗?(CSS:Day24)
  6. php 查找多维数组的值_php在多维数组中查找指定值的方法
  7. OpenWrt分支LEDE嵌入式无线路由系统定制-1.编辑环境搭建
  8. in use 大学英语4word_《新视野大学英语4网络测试题unit6++Microsoft+Word+文档》.doc
  9. MySQL8.0和MySQL 5的不同
  10. 12、vue-awsome-swiper与轮播图组件
  11. 黑马程序员--统计字符串中大小写字母和数字的个数问题的代码
  12. android格式化sd卡软件,如何在各种设备中把SD卡格式化?附误格式化数据恢复方法!...
  13. 孤独星球android app,《孤独星球》终于出了全套免费的旅行指南APP!
  14. 算法学习的一些个人心得
  15. 盘点那些年BAT字节跳动等互联网公司的程序员、工程师一夜暴富的都市传说
  16. 微信公php开发视频,PHP实现微信公众平台开发 全套视频资源下载
  17. XCTF-PWN pwn-200(使用DynELF利用write泄露system地址)
  18. 张小龙在2017微信公开课PRO版讲了什么(附演讲实录和2016微信数据报告)
  19. Docker——安装
  20. 对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?

热门文章

  1. Summer Training day4上帝与集合的正确用法 欧拉函数+降幂公式
  2. 深入浅出讲解语言模型
  3. Spring Boot 面试题
  4. require.ensure与require AMD的区别
  5. 关于 NIO 你不得不知道的一些“地雷”
  6. 龙芯linux内核,龙芯的linux kernel,内核开发与编译
  7. python 高维数据_Python数据分析入门|利用NumPy高效处理高维数据
  8. 学生上课睡觉班主任怎么处理_【师问师答】学生上课说话,点名批评还嘴怎么办?...
  9. js动态给按钮赋id_如何给SHOPIFY店铺添加“立即购买”动态结账按钮
  10. JDBC元数据操作(一)-- DatabaseMetaData接口详解