首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试Hibernate映射的最佳实践

测试Hibernate映射的最佳实践
EN

Stack Overflow用户
提问于 2011-10-16 15:03:57
回答 3查看 3.4K关注 0票数 2

我想知道,人们发现他们的最佳实践是测试Hibernate映射和查询吗?

这不能用单元测试来完成,所以我的经验是编写只向下测试DAO层的集成测试。通过这种方式,我可以完全测试每个插入/更新/删除/ ReadQueries,而无需测试完整的端到端解决方案。

每当集成测试套件运行时,它将:-

  1. 删除并重新创建数据库。
  2. 运行包含数据子集的导入SQL脚本。
  3. 在回滚事务的事务上下文中运行每个测试。因此,它可以作为独立测试多次运行,或者作为套件的一部分运行,并且返回的结果与数据库始终处于已知状态相同。

我从不针对不同的“内存”数据库进行测试,因为总有一个等价的开发数据库可用于测试。

我从来没有必要使用DBUnit。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-16 15:44:21

千万不要为此使用DbUnit。对于这个级别的测试来说,开销太大了。

特别是如果您在应用程序中使用Spring,请查看弹簧测试框架以帮助管理您的数据访问测试,特别是事务管理特性

一个“等价的开发数据库”是可以的,但是内存中的H2数据库会为了速度而将其他任何东西吹走。这一点很重要,因为虽然这些测试的单元/集成状态可能存在争议,但它们是您想要运行的测试,因此它们需要尽可能快。

所以我的DAO测试如下所示:

  1. Spring管理SessionFactoryTransactionManager
  2. Spring处理测试方法的所有事务。
  3. Hibernate在内存中的H2数据库中创建当前架构。
  4. 测试所有的保存、加载、删除和查找方法,对对象的前后进行实地比较.(例如,创建对象foo1,保存它,将其加载为foo2,验证foo1foo2包含相同的值。)

非常轻量级和有用的快速反馈。

票数 4
EN

Stack Overflow用户

发布于 2011-10-16 15:20:35

如果您不依赖于专有的关系数据库管理系统特性(触发器、存储过程等),那么您可以使用JUnit和像HSQLDB这样的内存数据库轻松和全面地测试DAO。您将需要通过一个类(使用HSQLDB初始化hibernate、加载所需的hibernate.cfg.xml文件)进行一些基本的hibernate.cfg.xml仿真,然后将提供的数据源传递给daos。

工作良好,并为开发生命周期提供了真正的价值。

票数 3
EN

Stack Overflow用户

发布于 2011-10-16 15:24:11

我的方法与您自己的非常相似,除了实际使用内存中的数据库,比如HSQLDB。它比配置真正的数据库(运行在独立服务器中的数据库)更快、更可移植。确实,对于某些更高级的特性,HSQLDB无法工作,因为它根本不支持这些特性,但我注意到,当只对数据访问层进行集成测试时,我很少遇到这些特性。但是,如果是这样的话,我喜欢使用mysql的"jar“版本,它允许我从java启动一个功能齐全的MYSql服务器,并在完成之后关闭它。这不是很实用,因为jar文件很大:

http://dev.mysql.com/doc/refman/5.0/en/connector-mxj-configuration-java-object.html

但在某些情况下还是有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7785114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档