java - 如何测试 hibernate 通用 dao 模式

标签 java hibernate unit-testing tdd

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

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

我已经阅读了几个解决方案,但我对其中一个都不满意:

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

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

谁能帮帮我?!

最佳答案

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

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

关于java - 如何测试 hibernate 通用 dao 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899103/

相关文章:

java - 如何以编程方式获取在 Eclipse 中打开的文件的元数据?

mysql - mysql 和 hsqldb 中兼容的 TEXT 字段

java - spring 应用程序的 hibernate 配置错误?

unit-testing - 如何测试一个 React 组件是否包含另一个带有 Tape 和 Enzyme 的组件?

php - 使用 Laravel Passport 范围进行单元测试

java - 使用注释定义具有不同 init-params 的同一类的多个 servlet

java - geotools 库创建 .jar 时出现问题?

java - OS X 10.8 Gatekeeper 和 Java 小程序

java - 使用一对一关系 hibernate 进行更新

unit-testing - 如何在 vue-test-utils 和 jest 中使用动态导入测试组件