我想知道,人们发现他们的最佳实践是测试Hibernate映射和查询吗?
这不能用单元测试来完成,所以我的经验是编写只向下测试DAO层的集成测试。通过这种方式,我可以完全测试每个插入/更新/删除/ ReadQueries,而无需测试完整的端到端解决方案。
每当集成测试套件运行时,它将:-
我从不针对不同的“内存”数据库进行测试,因为总有一个等价的开发数据库可用于测试。
我从来没有必要使用DBUnit。
发布于 2011-10-16 15:44:21
千万不要为此使用DbUnit。对于这个级别的测试来说,开销太大了。
特别是如果您在应用程序中使用Spring,请查看弹簧测试框架以帮助管理您的数据访问测试,特别是事务管理特性。
一个“等价的开发数据库”是可以的,但是内存中的H2数据库会为了速度而将其他任何东西吹走。这一点很重要,因为虽然这些测试的单元/集成状态可能存在争议,但它们是您想要运行的测试,因此它们需要尽可能快。
所以我的DAO测试如下所示:
SessionFactory和TransactionManager。foo1,保存它,将其加载为foo2,验证foo1和foo2包含相同的值。)非常轻量级和有用的快速反馈。
发布于 2011-10-16 15:20:35
如果您不依赖于专有的关系数据库管理系统特性(触发器、存储过程等),那么您可以使用JUnit和像HSQLDB这样的内存数据库轻松和全面地测试DAO。您将需要通过一个类(使用HSQLDB初始化hibernate、加载所需的hibernate.cfg.xml文件)进行一些基本的hibernate.cfg.xml仿真,然后将提供的数据源传递给daos。
工作良好,并为开发生命周期提供了真正的价值。
发布于 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
但在某些情况下还是有用的。
https://stackoverflow.com/questions/7785114
复制相似问题