Spring JdbcTemplate RowMapper Junit Test Example
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相关推荐
- 【SSM框架系列】Spring - JdbcTemplate声明式事务
JdbcTemplate概述 以往使用jdbc时,每次都需要自己获取PreparedStatement,执行sql语句,关闭连接等操作.操作麻烦冗余,影响编码的效率. Spring把对数据库的操作在j ...
- Spring全家桶(九)Spring JdbcTemplate
一.Spring JDBC Spring JDBC是在JDBC API的基础上定义一个抽象层,用以简化JDBC操作.Spring JdbcTemplate是Spring JDBC框架的核心,为不同类型 ...
- Spring JdbcTemplate方法详解
2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...
- SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装
SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ...
- spring JdbcTemplate数据库查询实例
使用JdbcTemplate查询数据库的例子 配置等可以看前一篇文章: Spring JdbcTemplate实例 创建数据库 可以使用下面的SQL create table A( `id` INT ...
- Spring JdbcTemplate实例
简介 Spring JdbcTemplate类是Spring提供的简化数据库操作的一个类,这个类使用了模板方法模式,可以减少一些重复代码.这里主要演示一下 JdbcTemplate 的使用. 完整的代 ...
- Spring JdbcTemplate示例
Spring JdbcTemplate示例 Spring JdbcTemplate是Spring JDBC包中最重要的类. 目录[ 隐藏 ] 1 Spring JdbcTemplate 1.1 Spr ...
- 06_02_任务三:Spring JDBCTemplate 声明式事务
任务三:Spring JDBCTemplate & 声明式事务 课程任务主要内容: Spring的JdbcTemplate Spring的事务 Spring集成web环境 一 Spring的J ...
- Spring JdbcTemplate的queryForList(String sql , ClassT elementType)易错使用--转载
原文地址: http://blog.csdn.net/will_awoke/article/details/12617383 一直用ORM,今天用JdbcTemplate再次抑郁了一次. 首先看下这个 ...
最新文章
- 世界级Oracle专家权威力作
- Installshield建立IE快捷方式的方法
- 3星|《掌控大趋势》:全球当前政治经济形式的资料汇编整理,对未来的预测很少,也缺乏独到深刻的见解...
- Codeforces 813B The Golden Age(数学+枚举)
- FAQ宝典之常见问题排查与修复方法
- Micropython教程之TPYBoard制作蓝牙+红外循迹小车
- Java集合框架:LinkedHashMap
- java链表变成字符串,leetcode算法题解(Java版)-6-链表,字符串
- python压缩文件不带根路径_python 压缩文件(解决压缩路径问题)
- MFC单选按钮的使用
- 【机器学习】Andrew Ng——05Octave
- 那英、那狗、那年、那事
- sap更改主题_SAP EP 主题设置
- conficker病毒
- 洛谷 P3987 我永远喜欢珂朵莉~(Splay+BIT+无限卡常)
- zencart如何更换模版
- java complex_用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加、减运算...
- 段错误(核心已转储)错误及解决过程
- ubuntu检查端口是否开启_技术|使用 nc 命令检查远程端口是否打开
- 电阻的组成、分类及读数方法
热门文章
- 清除及关闭Firefox的缓存
- 《三体》三部曲 读后杂记
- 死磕VR,爱奇艺的元宇宙大局观
- [Python可视化]一种极具特色(但是并没有什么用)的GIS专题图可视化方法
- NVIDIA显卡设置不可用——您当前未使用连接到NVIDIA GPU的显示器
- 前端-CSS画个月亮和心送给你
- 阿里P8高级技术专家自述被裁员,疑似给市长写信,房贷月供3w,压力很大,出门面试找工作很难!...
- c104win键被锁 ikbc_特别为小白们分享的Ikbc C104键盘使用感受
- required a bean of type 'com.xxx.xxx' that could not be found.错误
- 从零到壹构建基于 Fabric-SDK-Go 的Web应用之三:完成Web应用