使用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

最新文章

  1. js中对象使用
  2. POJ3114 Countries in War (强连通分量 + 缩点 + 最短路径 + 好题)
  3. 打开Excel的报错,提示:不能使用对象链接和嵌入
  4. [CrunchBang]修改win+ubuntu 双 系统菜单的 启动顺序 引导
  5. [EventBus源码解析] EventBus.post 方法详述
  6. Zend Debugger 配置
  7. .net 连接sqlserver类库
  8. Retry Pattern
  9. RocketMQ在Windows平台下环境搭建
  10. Javascript 迭代法实现数组多条件排序
  11. php如何在原来的时间上加一天?一小时
  12. 基于visual Studio2013解决C语言竞赛题之1002字符打印
  13. CXF.bat
  14. [iOS Animation]-CALayer 显示动画
  15. 两种代理模式(JDK和Cglib)实例
  16. Win7常用快捷键整理
  17. bzoj千题计划217:bzoj2333: [SCOI2011]棘手的操作
  18. [数据结构] 树状数组 的C程序实现
  19. WEEX入坑指南(1)
  20. 论文笔记:Person Re-identification with Deep Similarity-Guided Graph Neural Network

热门文章

  1. Angular 2 Quickstart
  2. 使用Fiddler
  3. 在eclipse中配置maven
  4. max_flow(Ford-Fulkerson) 分类: ACM TYPE 2014-09-02 01:50 110人阅读 评论(0) 收藏
  5. Sprite Kit 入门教程
  6. HBAO
  7. JDBC编程步骤
  8. .Net 执行 Oracle SQL语句时, 中文变问号
  9. 安装JDK后环境变量的配置
  10. #!--->hashbang技术