使用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. codeforces 22E XOR on Segment 线段树

    题目链接: http://codeforces.com/problemset/problem/242/E E. XOR on Segment time limit per test 4 seconds ...

  2. codeforces D. Queue 找规律+递推

    题目链接: http://codeforces.com/problemset/problem/353/D?mobile=true H. Queue time limit per test 1 seco ...

  3. IIS OCIEnvCreate failed with return code -1

    现象:windows server2008服务器,MVC使用NHiberate连接Oracle11g,程序部署到IIS后无法访问数据库,抛上述异常:在服务器上安装VS调试可以访问数据库 解决方法:连接 ...

  4. 设计模式之享元模式(FlyWeight)

    #include <iostream> #include <string> #include <list> #include <vector> usin ...

  5. Leetcode#117 Populating Next Right Pointers in Each Node II

    原题地址 二叉树的层次遍历. 对于每一层,依次把各节点连起来即可. 代码: void connect(TreeLinkNode *root) { if (!root) return; queue< ...

  6. Least Common Ancestors 分类: ACM TYPE 2014-10-19 11:24 84人阅读 评论(0) 收藏

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. 100个经典的C算法

    1.题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少? #include<stdio.h&g ...

  8. java多线程基础知识

    1.ThrTest.java 继承Thread类方式 public class ThrTest extends Thread { private String name; public ThrTest ...

  9. pyhton Chapter3 读文件

    使用内置函数open()打开文件,data=open("1.txt").利用data.close()关闭文件.利用data.readline()读取文件中的一行数据,然后指示读取文 ...

  10. 客户端的数据来源:QueryString, Form, Cookie Request[]与Request.Params[]

    在ASP.NET编程中,有三个比较常见的来自于客户端的数据来源:QueryString, Form, Cookie . 我们可以在HttpRequest中访问这三大对象. QueryString: 获 ...