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. Python零基础学习代码实践 —— 提取字符串里面的单词数
  2. SwfUpload及imgareaselect使用方法
  3. 运行Python程序的2种方式
  4. Flink x Zeppelin ,Hive Streaming 实战解析
  5. 判断一个图是否有环(有向图,无向图)
  6. Wireshark 的使用 —— 过滤器(filter)
  7. 深度学习样本标完后图片增强标签内容不变
  8. Android socketnetty实现
  9. 服务器系统打不上网卡驱动,服务器网卡驱动程序不能正确加载
  10. 科来过滤jd提示语法解析器错误的解决问题方法
  11. 采集插件,自动采集伪原创发布插件
  12. 如何使用u深度启动u盘清除系统登录密码
  13. CISSP-考纲分析
  14. java实现gdal栅格矢量化_gdal栅格矢量化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...
  15. 了解ZigBee以及硬件环境
  16. 学计算机要选什么科,计算机要学什么科目
  17. 2020CCPC绵阳站 D-Defuse the Bombs (二分答案)
  18. OpenWrt 系列教程汇总
  19. 苏州技师学院计算机专业怎么样,苏州技师学院口碑怎么样
  20. leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排

热门文章

  1. iCloud的真正目的:置Windows于死地
  2. vim 块选择 多行操作
  3. 间隔时间计算公式_间隔
  4. 几行代码爬取某东商品评论并写入数据库做成词云
  5. CSS实现立体字效果
  6. 大数据:广州租房信息统计,这些地方最便宜
  7. 语音控制TonyPi
  8. {转载)人美!转手绘教程也棒
  9. 计算机系统之存储器管理
  10. 算法设计技巧与分析(八):随机算法(Randomized Algorithms)