Spring JdbcTemplate RowMapper Junit Test Example

文章目录

  • Spring JdbcTemplate RowMapper Junit Test Example
  • 这个例子展示了如何编写 junit 来测试 Spring RowMapper 的功能,同时使用 Mockito 模拟 JdbcTemplate

  • 这也增加了 RowMapper 代码的代码覆盖率。

  • 下面是使用 Lambda 使用 RowMapper 返回用户列表的 DAO 类。

Spring JdbcTemplate RowMapper Example with Lambdas

package com.wsq.dao;import java.sql.ResultSet;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import com.wsq.beans.User;@Repository
public class UserDAO {@Autowiredprivate JdbcTemplate jdbcTemplate;public List<User> getAllUsers() {return jdbcTemplate.query("SELECT ID, NAME, STATUS FROM USER", (ResultSet rs, int rowNum) -> {User user = new User();user.setId(rs.getInt("ID"));user.setName(rs.getString("NAME"));user.setStatus(rs.getBoolean("STATUS"));return user;});}}

  • 下面是通过模拟 JdbcTemplate 返回两行来测试 RowMapper 代码的 Junit 测试类。

Spring JdbcTemplate RowMapper Junit test example

package com.wsq.dao;import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;import com.wsq.beans.User;@RunWith(MockitoJUnitRunner.class)
public class UserDAOTest {@Mockprivate JdbcTemplate jdbcTemplate;@InjectMocksprivate UserDAO userDAO;@SuppressWarnings("unchecked")@Testpublic void testGetAllUsers() {//invocation.getArgument(1) 这里要注意,因为使用了2个参数,所以我们在Mock第2个参数代码块部分,索引下标是1//假如使用jdbcTemplate.query(sql, Object[], RowMapper),那么我们在mock -》 RowMapper时,就需要索引使用2:invocation.getArgument(2)//当然上面也要修改:jdbcTemplate.query(ArgumentMatchers.anyString(), (Object [])ArgumentMatchers.any(),ArgumentMatchers.any(RowMapper.class)))Mockito.when(jdbcTemplate.query(ArgumentMatchers.anyString(), ArgumentMatchers.any(RowMapper.class))).thenAnswer((invocation) -> {RowMapper<User> rowMapper = (RowMapper<User>) invocation.getArgument(1);ResultSet rs = Mockito.mock(ResultSet.class);// Mock ResultSet to return one rows.// Mockito.when(rs.getInt(ArgumentMatchers.eq("ID"))).thenReturn(506);// Mock ResultSet to return two rows.Mockito.when(rs.getInt(ArgumentMatchers.eq("ID"))).thenReturn(506, 400);Mockito.when(rs.getString(ArgumentMatchers.eq("NAME"))).thenReturn("Jim Carrey", "John Travolta");Mockito.when(rs.getBoolean(ArgumentMatchers.eq("STATUS"))).thenReturn(true, false);List<User> users = new ArrayList<>();users.add(rowMapper.mapRow(rs, 0));users.add(rowMapper.mapRow(rs, 1));return users;});List<User> users = userDAO.getAllUsers();// Assert First RowassertFirstUser(users.get(0));// Assert Second RowassertSecondUser(users.get(1));}public void assertFirstUser(User user) {Assert.assertEquals(Integer.valueOf(506), user.getId());Assert.assertEquals("Jim Carrey", user.getName());Assert.assertTrue(user.isStatus());}public void assertSecondUser(User user) {Assert.assertEquals(Integer.valueOf(400), user.getId());Assert.assertEquals("John Travolta", user.getName());Assert.assertFalse(user.isStatus());}
}

最后喜欢的小伙伴,记得关注收藏哦!

Spring JdbcTemplate RowMapper Junit Test Example相关推荐

  1. 【SSM框架系列】Spring - JdbcTemplate声明式事务

    JdbcTemplate概述 以往使用jdbc时,每次都需要自己获取PreparedStatement,执行sql语句,关闭连接等操作.操作麻烦冗余,影响编码的效率. Spring把对数据库的操作在j ...

  2. Spring全家桶(九)Spring JdbcTemplate

    一.Spring JDBC Spring JDBC是在JDBC API的基础上定义一个抽象层,用以简化JDBC操作.Spring JdbcTemplate是Spring JDBC框架的核心,为不同类型 ...

  3. Spring JdbcTemplate方法详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...

  4. SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装

    SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ...

  5. spring JdbcTemplate数据库查询实例

    使用JdbcTemplate查询数据库的例子 配置等可以看前一篇文章: Spring JdbcTemplate实例 创建数据库 可以使用下面的SQL create table A( `id` INT ...

  6. Spring JdbcTemplate实例

    简介 Spring JdbcTemplate类是Spring提供的简化数据库操作的一个类,这个类使用了模板方法模式,可以减少一些重复代码.这里主要演示一下 JdbcTemplate 的使用. 完整的代 ...

  7. Spring JdbcTemplate示例

    Spring JdbcTemplate示例 Spring JdbcTemplate是Spring JDBC包中最重要的类. 目录[ 隐藏 ] 1 Spring JdbcTemplate 1.1 Spr ...

  8. 06_02_任务三:Spring JDBCTemplate 声明式事务

    任务三:Spring JDBCTemplate & 声明式事务 课程任务主要内容: Spring的JdbcTemplate Spring的事务 Spring集成web环境 一 Spring的J ...

  9. Spring JdbcTemplate的queryForList(String sql , ClassT elementType)易错使用--转载

    原文地址: http://blog.csdn.net/will_awoke/article/details/12617383 一直用ORM,今天用JdbcTemplate再次抑郁了一次. 首先看下这个 ...

最新文章

  1. 世界级Oracle专家权威力作
  2. Installshield建立IE快捷方式的方法
  3. 3星|《掌控大趋势》:全球当前政治经济形式的资料汇编整理,对未来的预测很少,也缺乏独到深刻的见解...
  4. Codeforces 813B The Golden Age(数学+枚举)
  5. FAQ宝典之常见问题排查与修复方法
  6. Micropython教程之TPYBoard制作蓝牙+红外循迹小车
  7. Java集合框架:LinkedHashMap
  8. java链表变成字符串,leetcode算法题解(Java版)-6-链表,字符串
  9. python压缩文件不带根路径_python 压缩文件(解决压缩路径问题)
  10. MFC单选按钮的使用
  11. 【机器学习】Andrew Ng——05Octave
  12. 那英、那狗、那年、那事
  13. sap更改主题_SAP EP 主题设置
  14. conficker病毒
  15. 洛谷 P3987 我永远喜欢珂朵莉~(Splay+BIT+无限卡常)
  16. zencart如何更换模版
  17. java complex_用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加、减运算...
  18. 段错误(核心已转储)错误及解决过程
  19. ubuntu检查端口是否开启_技术|使用 nc 命令检查远程端口是否打开
  20. 电阻的组成、分类及读数方法

热门文章

  1. 清除及关闭Firefox的缓存
  2. 《三体》三部曲 读后杂记
  3. 死磕VR,爱奇艺的元宇宙大局观
  4. [Python可视化]一种极具特色(但是并没有什么用)的GIS专题图可视化方法
  5. NVIDIA显卡设置不可用——您当前未使用连接到NVIDIA GPU的显示器
  6. 前端-CSS画个月亮和心送给你
  7. 阿里P8高级技术专家自述被裁员,疑似给市长写信,房贷月供3w,压力很大,出门面试找工作很难!...
  8. c104win键被锁 ikbc_特别为小白们分享的Ikbc C104键盘使用感受
  9. required a bean of type 'com.xxx.xxx' that could not be found.错误
  10. 从零到壹构建基于 Fabric-SDK-Go 的Web应用之三:完成Web应用