如何测试休眠通用 dao 模式

Posted

技术标签:

【中文标题】如何测试休眠通用 dao 模式【英文标题】:How to test the hibernate generic dao pattern 【发布时间】:2012-10-05 15:10:33 【问题描述】:

我正在使用 Google Guice 和 Hibernate 开始一个项目,在配置数据库访问层的方式上,我在此过程中遇到了几个疑问。

我在 POJO 中使用 JPA 注释,而我的通用 DAO 实现使用 EntityManager 对象与数据库进行通信。我进行了几次“手动”测试,发现它运行良好,但我更喜欢遵循 ​​TDD 方法来强化我在这种方法中的知识。我不确定在 java 中测试泛型的最佳方法是什么,更不用说测试 Hibernate Generic DAO 模式的最佳解决方案了。

我已经阅读了几个解决方案,但我对它们都不太满意:

其中之一是创建一个抽象类来测试通用 DAO 并使用抽象方法来获取特定的 DAO 并让实例持久化等。 另一种解决方案包括使用抽象类(与之前的解决方案一样)并使用工厂而不是抽象方法:使用这两种解决方案,我不知道是否值得拥有一种方法来获取一个实体来测试每个案例在我的项目中。 另一种解决方案可能是测试特定 DAO 中的每个功能而不是通用 dao:我认为这是最糟糕的解决方案,因为在大多数情况下,我将不得不重复大量代码来测试同样的事情。

除此之外,我读到最好删除 DAO 层并直接从服务中使用实体管理器:我认为这不是最好的方法,因为您将数据库层与服务层混合在一起.

谁能帮帮我?!

【问题讨论】:

【参考方案1】:

DAO 和 entityManager 的区别在哪里?它们都是数据库层,只是不同的抽象层。

要测试查询等,内存数据库比模拟完整的数据访问层要好。

【讨论】:

嗯...我没有那样想,也许我必须深思熟虑。我正在使用内存数据库进行测试,我的问题集中在测试数据访问层的更好策略是什么。 测试真正的实现,否则测试是无稽之谈,因为他们没有测试他们应该做的事情。

以上是关于如何测试休眠通用 dao 模式的主要内容,如果未能解决你的问题,请参考以下文章

在通用 DAO 中获取当前对象 ID。休眠

使用休眠时的 DAO 模式

NullPointerException 使用 Spring 使 Generic Dao 休眠

休眠/春季:getHibernateTemplate().save(...) 冻结/挂起

ORM 和 DAO 设计模式

从 POJO 获取注解休眠表名