我想知道人们找到了哪些最佳实践来测试 Hibernate 映射和查询?
这不能通过单元测试来完成,所以我的经验是编写仅向下测试 DAO 层的集成测试。这样我就可以完全测试每个 Insert/Update/Delete/ReadQueries,而无需测试完整的端到端解决方案。
无论何时运行集成测试套件,它都会:-
- 删除并重新创建数据库。
- 运行包含数据子集的导入 SQL 脚本。
- 在回滚事务的事务上下文中运行每个测试。因此,它可以作为独立测试或作为套件的一部分运行多次,并且返回相同的结果,因为数据库始终处于已知状态。
我从不针对不同的“内存中”数据库进行测试,因为总有一个等效的开发数据库可供测试。
我从未需要使用 DBUnit。
最佳答案
切勿为此使用 DbUnit。对于这种级别的测试来说,开销太大了。
特别是如果您在应用程序中使用 Spring,请查看 Spring Test Framework帮助管理您的数据访问测试,尤其是 transaction management features .
“等效开发数据库”很好,但内存中 H2 database为了速度会吹走任何其他东西。这很重要,因为虽然这些测试的单元/集成状态可能存在争议,但它们是您希望经常运行的测试,因此它们需要尽可能快。
所以我的 DAO 测试看起来像这样:
- Spring 管理
SessionFactory
和TransactionManager
。 - Spring 处理测试方法的所有事务。
- Hibernate 在内存中的 H2 数据库中创建当前模式。
- 测试所有的保存、加载、删除和查找方法,对前后对象进行字段对字段比较。 (例如,创建对象
foo1
,保存它,将其加载为foo2
,验证foo1
和foo2
包含相同的值。 )
非常轻巧,对于快速反馈很有用。
关于java - 测试 Hibernate 映射的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785114/