java - 测试 Hibernate 映射的最佳实践

标签 java hibernate integration-testing

我想知道人们找到了哪些最佳实践来测试 Hibernate 映射和查询?

这不能通过单元测试来完成,所以我的经验是编写仅向下测试 DAO 层的集成测试。这样我就可以完全测试每个 Insert/Update/Delete/ReadQueries,而无需测试完整的端到端解决方案。

无论何时运行集成测试套件,它都会:-

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

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

我从未需要使用 DBUnit。

最佳答案

切勿为此使用 DbUnit。对于这种级别的测试来说,开销太大了。

特别是如果您在应用程序中使用 Spring,请查看 Spring Test Framework帮助管理您的数据访问测试,尤其是 transaction management features .

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

所以我的 DAO 测试看起来像这样:

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

非常轻巧,对于快速反馈很有用。

关于java - 测试 Hibernate 映射的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785114/

相关文章:

java - 安卓分享按钮

java - 不是语句(for 循环)

java - 使用代码注释将用户表达的需求与代码联系起来是个好主意吗?

Hibernate:代理实现细节(Lazy Fetching)

selenium - 如何通过终端使用 chrome 驱动程序运行 selenium 3.x

integration-testing - 公共(public) SFTP 测试服务器地址

java - 填充两个 CubicCurve2D.Float 和一条线内的区域

java - 初始化 C3P0 连接池需要 2 分钟

java - 如何在 Hibernate 中创建/调用 sql View

java - 如何设置单独的数据库进行测试?