我有罪,直到现在才写集成测试(至少针对数据库相关事务)。 因此,为了消除内感,我阅读了如何在周末以最少的努力实现这一目标。 提供了一个小示例,描述了如何使用Spring和Hibernate轻松实现这一目标。 通过集成测试,您可以测试DAO(数据访问对象)层,而无需部署应用程序。 对我来说,这是一个巨大的优势,因为现在我甚至可以在不运行应用程序的情况下测试我的条件,命名查询和排序。

休眠中有一个属性,可让您指定初始化会话工厂时要运行的sql脚本。 这样,我现在可以用DAO层所需的数据填充表。 属性如下:

<prop key='hibernate.hbm2ddl.import_files'>import.sql</prop>

根据hibernate 文档 ,您可以有许多以逗号分隔的sql脚本。这里的一个陷阱是您无法使用该脚本创建表。 因为需要首先创建架构才能运行脚本。 即使您在脚本中发出了create table语句,执行脚本时也会忽略该语句,正如我所看到的那样。

让我首先向您展示我要测试的DAO课;

package com.unittest.session.example1.dao;import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.unittest.session.example1.domain.Employee;@Transactional(propagation = Propagation.REQUIRED)
public interface EmployeeDAO {public Long createEmployee(Employee emp);public Employee getEmployeeById(Long id);
}
package com.unittest.session.example1.dao.hibernate;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.unittest.session.example1.dao.EmployeeDAO;
import com.unittest.session.example1.domain.Employee;public class EmployeeHibernateDAOImpl extends HibernateDaoSupport implementsEmployeeDAO {@Overridepublic Long createEmployee(Employee emp) {getHibernateTemplate().persist(emp);return emp.getEmpId();}public Employee getEmployeeById(Long id) {return getHibernateTemplate().get(Employee.class, id);}
}

没什么大不了的,只是一个简单的DAO,它有两种方法,一种是持久化,另一种是检索。 对我来说,测试检索方法需要用一些数据填充Employee表。 这是前面介绍的导入sql脚本起作用的地方。 import.sql文件如下所示;

insert into Employee (empId,emp_name) values (1,'Emp test');

这只是一个基本脚本,我在其中将一条记录插入到employee表中。 在此再次注意,employee表应该通过hibernate auto create DDL选项创建,以便运行sql脚本。 更多信息可以在这里找到。 同样,我实例中的import.sql脚本也位于类路径中。 这是为了在创建Session工厂时能够将其拾取而执行的。

接下来,让我们看看使用Spring运行集成测试有多么容易。

package com.unittest.session.example1.dao.hibernate;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;import com.unittest.session.example1.dao.EmployeeDAO;
import com.unittest.session.example1.domain.Employee;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations='classpath:spring-context.xml')
@TransactionConfiguration(defaultRollback=true,transactionManager='transactionManager')
public class EmployeeHibernateDAOImplTest {@Autowiredprivate EmployeeDAO employeeDAO;@Testpublic void testGetEmployeeById() {Employee emp = employeeDAO.getEmployeeById(1L);assertNotNull(emp);}@Testpublic void testCreateEmployee(){Employee emp = new Employee();emp.setName('Emp123');Long key = employeeDAO.createEmployee(emp);assertEquals(2L, key.longValue());}}

这里要注意的几件事是,您需要指示在Spring上下文中运行测试。 为此 ,我们使用SpringJUnit4ClassRunner 。 还将transction属性设置为defaultRollback = true。 请注意,对于MySQL,要使其正常工作,您的表必须设置InnoDB引擎,因为MyISAM引擎不支持事务。

最后,我介绍了弹簧配置,它可以将所有东西连接起来;

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:aop='http://www.springframework.org/schema/aop'xmlns:tx='http://www.springframework.org/schema/tx' xmlns:context='http://www.springframework.org/schema/context'xsi:schemaLocation='  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd'><context:component-scan base-package='com.unittest.session.example1' /><context:annotation-config /><tx:annotation-driven /><bean id='sessionFactory'class='org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean'><property name='packagesToScan'><list><value>com.unittest.session.example1.**.*</value></list></property><property name='hibernateProperties'><props><prop key='hibernate.dialect'>org.hibernate.dialect.MySQLDialect</prop><prop key='hibernate.connection.driver_class'>com.mysql.jdbc.Driver</prop><prop key='hibernate.connection.url'>jdbc:mysql://localhost:3306/hbmex1</prop><prop key='hibernate.connection.username'>root</prop><prop key='hibernate.connection.password'>password</prop><prop key='hibernate.show_sql'>true</prop><prop key='hibernate.dialect'>org.hibernate.dialect.MySQLDialect</prop><!-- --><prop key='hibernate.hbm2ddl.auto'>create</prop><prop key='hibernate.hbm2ddl.import_files'>import.sql</prop></props></property></bean><bean id='empDAO'class='com.unittest.session.example1.dao.hibernate.EmployeeHibernateDAOImpl'><property name='sessionFactory' ref='sessionFactory' /></bean><bean id='transactionManager'class='org.springframework.orm.hibernate3.HibernateTransactionManager'><property name='sessionFactory' ref='sessionFactory' /></bean></beans>

就是这样。 我个人宁愿使用重量更轻的内存数据库(例如hsqldb )来运行集成测试。

这是供任何想运行该程序并尝试使用它的人的eclipse项目。

参考:来自My Journey Through IT博客的JCG合作伙伴 Dinuka Arseculeratne 与Spring + Hibernate进行集成测试有多酷 。

翻译自: https://www.javacodegeeks.com/2012/11/how-cool-is-integration-testing-with-spring-and-hibernate.html

使用Spring和Hibernate进行集成测试有多酷相关推荐

  1. 基于Spring+Struts+Hibernate实现的健康管理平台

    源码及论文下载:http://www.byamd.xyz/tag/java/ 摘要 随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,H ...

  2. 【spring框架】spring整合hibernate初步

    spring与hibernate做整合的时候,首先我们要获得sessionFactory. 我们一般只需要操作一个sessionFactory,也就是一个"单例",这一点很适合交给 ...

  3. Spring MVC + Hibernate JPA + Bootstrap 搭建的博客系统

    Spring MVC + Hibernate JPA + Bootstrap 搭建的博客系统 Demo 相关阅读: 1.Spring MVC+Hibernate JPA+ Bootstrap 搭建的博 ...

  4. Spring+SpringMvc+Hibernate 框架搭建

    2019独角兽企业重金招聘Python工程师标准>>> 框架篇:Spring+SpringMVC+hibernate整合开发 一.建立项目 1.新建一个空项目project 相当于e ...

  5. 在Spring、Hibernate中使用Ehcache缓存

    前一篇http://blog.csdn.net/ibm_hoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面.对象缓存:这里将介绍在Hibern ...

  6. 【Spring】Spring系列6之Spring整合Hibernate

    6.Spring整合Hibernate 6.1.准备工作 6.2.示例 com.xcloud.entities.book com.xcloud.dao.book com.xcloud.service. ...

  7. Spring整合Hibernate图文步骤

    工具:myeclipse9.0 Spring版本:2.5.6 Hibernate版本:3 昨天花了一下午时间把Spring和Hibernate整合到了一起,今天做一个笔记. 首先建立java Proj ...

  8. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  9. Spring与Hibernate两种组合方式

    Spring与Hibernate大致有两种组合方式,主要区别是一种是在Hibernate中的hibernate.cfg.xml中配置数据源,一种是借助Spring的jdbc方式在Spring的appl ...

最新文章

  1. 操作系统学习笔记 第二章:进程管理(王道考研)
  2. 机器学习与高维信息检索 - Note 4 - 主成分分析及其现代解释(Principal Component Analysis, PCA)及相关实例
  3. 求高维方阵的绝对值最大特征值的方法:幂法(幂迭代)。
  4. OpenCV学习笔记——Mat类型数据存储
  5. js获取checkbox复选框获取选中的选项
  6. swift5.x基础知识入门
  7. 分享一个多功能SVN备份脚本
  8. 模块二、添加Customer 类
  9. es 初识调研,相关知识点汇总
  10. 如何用Python操作PDF制作数据报告?
  11. 编码:隐藏在计算机软硬件背后的语言(一)编码
  12. 鏖战双十一:阿里直播平台面临的技术挑战
  13. 计算机PPT中项目编号怎么弄,电脑技巧收藏家电脑基础设置幻灯片格式:项目符号和编号...
  14. Windows 无法连接到打印机,操作失败,错误为:0x00000bcb
  15. 数字中国建设意义和面临的挑战
  16. 数据库外键级联修改删除
  17. 阿里巴巴鸿蒙系统,都说鸿蒙系统要比阿里YunOS更容易成功,到底容易在哪些方面?...
  18. 【项目二】爱奇艺分类点击实时统计
  19. 用c语言编写一个酒店点菜菜单,C课程设计报告酒店点菜管理系统设计.doc
  20. 程序员转行产品经理,瓶颈是什么?

热门文章

  1. java按列读取数据再存储_Java指定行读写数据
  2. pandas追加写入excel_[Excel]如果你爱Excel,请学好pandas
  3. 转-SpringBoot——使用外置的Tomcat服务器
  4. foreach 循环详解
  5. XML—— 验证XML文档
  6. python异常值如何处理_如何处理异常
  7. 交流伺服系统设计指南_交流设计
  8. 来的多可选_您的框架有多可扩展性?
  9. 易流即时配送_即时大数据流处理=即时风暴
  10. gradle docker_带有Gradle的Docker容器分为4个步骤