使用JUnit测试DAO层。由于不能破坏数据现场,故所有的测试类都继承了Spring测试框架下的 org.springframework.test.AbstractTransactionalDataSourceSpringContextTests 类。继承该类,代码中对数据库的修改,在方法结束后自动回滚(当然,通过设置也可以COMMIT),并且提供了 getJdbcTemplate() 方法,以便于对数据修改的测试。

如果你的DAO层的部分代码是用Hibernate来实现的,在测试时,也许会出现问题。

如,

 // 伪代码

 // 保存一个对象

 hibernate.add(obj);

 // 验证

 // 使用Spring测试框架中自带的方法 getJdbcTemplate() 到数据库中去查询这个对象 「应该」 是有值的

 Object expectedObj = getJdbcTemplate().queryForObject(obj);
assertNotNull(expectedObj );

你会发现测试不通过。因为 expectedObj 是空值。

明明在第 5 行代码里,调用了 hibernate 的 add 方法,为什么数据库里会没有值?

想一想……

是存入数据库时出现了异常?

是查询数据库的时候条件不正确?

……

都不是。

因为 session 。

hibernate使用的session和JdbcTemplate使用的session(姑且先这么说)不是同一个。

那怎么办呢?

好办!只要在hibernate的add方法执行后,加一个 flushSession 即可。

 // 伪代码

 // 保存一个对象

 hibernate.add(obj);
// 新加的
flushCurrentSession(); // 验证 // 使用Spring测试框架中自带的方法 getJdbcTemplate() 到数据库中去查询这个对象 「应该」 是有值的 Object expectedObj = getJdbcTemplate().queryForObject(obj);
assertNotNull(expectedObj ); // 该方法可以放到一个父类里,所有的测试类都继承它
  protected void flushCurrentSession(){
Session session = SessionFactoryUtils.getSession(sessionFactory, false);
if (null != session){
session.flush();
}
}

再运行JUnit看看,It's GREEN !

Wow, so wonderful !


详细代码可参看笔者在GitHub上的代码:

https://github.com/YoungZHU/CollectionCode4Java/blob/master/test/org/young/sh/dao/OrderDAOImplTest.java

JUnit + Spring + Hibernate 集成测试,无法通过的问题的更多相关文章

  1. 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建

    1. 前言 基于Maven的开发方式开发项目已经成为主流.Maven能很好的对项目的层次及依赖关系进行管理.方便的解决大型项目中复杂的依赖关系.S2SH(Struts2+Spring+Hibernat ...

  2. SSH面试题(struts2+Spring+hibernate)

    struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory ...

  3. spring+hibernate常见异常集合

    spring+hibernate出错小结: (1)java.lang.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext ...

  4. SpringMVC+Spring+Hibernate+Maven+mysql整合

    一.准备工作 1.工具:jdk1.7.0_80(64)+tomcat7.0.68+myeclipse10.6+mysql-5.5.48-win322. 开发环境安装配置.Maven项目创建(参考:ht ...

  5. spring+hibernate+struts整合(1)

    spring+hibernate:整合 步骤1:引入类包 如下图:这里是所有的类包,为后面的struts整合考虑

  6. SpringMVC+Spring+Hibernate的小样例

    Strusts2+Spring+Hibernate尽管是主流的WEB开发框架,可是SpringMVC有越来越多的人使用了.确实也很好用.用得爽! 这里实现了一个SpringMVC+Spring+Hib ...

  7. Maven搭建springMVC+spring+hibernate环境

    这次不再使用struts2做控制器,采用spring自己的springMVC框架实现. 首先,改写pom.xml文件,不需要struts2的相关jar了. pom.xml <project xm ...

  8. Maven搭建struts2+spring+hibernate环境

    Maven搭建struts2+spring+hibernate环境(一) 本文简单的使用STS的自带的maven插件工具搭建ssh(struts2+spring+hibernate)开发环境,图文并茂 ...

  9. spring+hibernate项目demo搭建

    之前用maven+spring+mybatis+spring mvc搭建了一个web项目,用于学习spring及相关知识,现在打算将mybatis换成hibernate,一样搭建一个框架. 其实myb ...

随机推荐

  1. 【HDOJ】【3516】Tree Construction

    DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...

  2. [百度空间] [原]跨平台编程注意事项(二): windows下 x86到x64的移植

    之前转的: 将程序移植到64位Windows 还有自己乱写的一篇: 跨平台编程注意事项(一) 之前对于x64平台的移植都是纸上谈兵,算是前期准备工作, 但起码在写代码时,已经非常注意了.所以现在移植起 ...

  3. Eclipse新版 syso无法自动补全的解决方法

    症状: 以前输入Syso可以直接自动转化为System.out.println(""); 现如今居然还要让我手动选择一下才可以! 我仔细看了一下Eclipse的插件,发现是新版Ec ...

  4. magic_quotes_runtime 与 magic_quotes_gpc

    magic_quotes_runtime 与 magic_quotes_gpc 这两个函数都是管理是否对数据进行特殊符号转义,但是他们针对的处理对象不同: magic_quotes_gpc的设定值将会 ...

  5. self._raiseerror(v) File "D:\GameDevelopment\Python27\lib\xml\etree\ElementTree.py", line 1506, in _raiseerror

    D:\BaiDuYun\Plist>python unpack_plist.py lobbyRelieveTraceback (most recent call last): File &quo ...

  6. Sqli-labs less 55

    Less-55 本关的sql语句为: $sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1"; 其余和less54 ...

  7. ASP.NET Session的七点认识

    原文:http://kb.cnblogs.com/page/108689/ ASP.NET Session的使用当中我们会遇到很多的问题,那么这里我们来谈下经常出现的一些常用ASP.NET Sessi ...

  8. GCD的简单封装

    扩展: dispatch_block_t :无参数block,使用起来很简单 下载链接:http://pan.baidu.com/s/1bndN6Yb    ]; }     //定时器 - (voi ...

  9. POJ 1338

    #include<iostream> #include<stdio.h> #include<iomanip> #define MAXN 100000 using n ...

  10. LoaderManager使用详解(三)---实现Loaders

    这篇文字将介绍Loader<D>类,并且介绍自定义Loader的实现.这是本系列的第三篇文章.   一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders ...