java - 使用 Hibernate 进行测试 : Object dependence chain on persistence

标签 java unit-testing hibernate junit jmock

我正在为 DAO 层准备单元测试,该层与实体对象交互以持久保存到数据库中。

技术 hibernate java 1.6 JUnit

假设我想创建测试方法addEntityA()

为此,我创建了 EntityA 对象。现在的问题是 EntityA 是 EntityB 的子级。所以我必须在EntityA中指定EntityB的引用。仅当EntityB先被持久化时,EntityA才会被持久化到数据库中。因此,为了测试 EntityA 的持久性,我将测试 EntityB 的持久性。这样,它可能会导致实体链必须在实体 A 实际持久化进行测试之前被持久化。有人可能会争辩说我应该提供已经持久化的 EntityB 对象的引用。但问题是我不想让测试用例依赖于数据库中的测试而不是测试数据。我与 JMock 解决的问题有些相似,但不确定 Jmock 在这里如何以及是否有用?

如果问题不清楚,请告诉我?

最佳答案

不确定您的实际问题是什么,但在我看来,测试 Hibernate/JPA 功能的最佳方法是使用内存数据库和一个不错的测试工具。对于测试工具,我的意思是持久性相关类的基类,它将在每个测试(可能只是每个测试类)创建和删除内存数据库。测试工具还应该提供对测试期间使用的实体管理器或 session 的访问。 如果您对配置文件使用过滤,则可以使用属性来切换数据库,以便也针对“真实”数据库进行测试。 最后但并非最不重要的一点是,如果您的 EntityA 测试需要 EntityB,您将需要在测试设置或测试本身中创建 EntityB。 查看 Hibernate Core 的测试工具,了解如何在那里完成测试。

关于java - 使用 Hibernate 进行测试 : Object dependence chain on persistence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4562235/

相关文章:

java - 线程 "main"javax.persistence.PersistenceException : No Persistence provider for EntityManager named lanceurApplication 中出现异常

java.lang.ClassNotFoundException : com. twilio.type.Endpoint tomcat 问题

java - 如何检查房间数据库是否为空

java - 从 Jenkins(Maven 项目)执行 TestNG.xml

ruby - 编写单元测试以将数据保存到数据库中

java - Hibernate 级联删除 ConstraintViolationException

java - 如何通过maven将java jar文件部署到远程服务器

java - 测试两个客户端直接连接相同的IP和端口

unit-testing - 在 Clojure 中使用时间戳值测试 map

java - 使用 JPA 2.0 Criteria API 选择定义集的超集数据