java - 测试 hibernate 父/子关系

标签 java unit-testing hibernate spring junit

我使用 spring 和 hibernate 作为我的数据访问层 我想获得一些关于如何构建我的单元测试以测试 hibernate 是否有效地插入到子表中的指导(父 hibernate 映射具有全部级联)。 据我所知,我不应该混合 dao 的单元测试。所以假设我正在测试父 DAO 方法 saveWithChild:

public void testSaveWithChild() {
  Child c1 = new Child("prop1", "prop2", prop3);
  Child c2 = new Child("prop4", "prop4", prop3);
  Parent p = new Parent("prop6","prop7");
  p.addChild(c1);
  p.addChild(c2);
  Session session = MysessionImplementation.getSession();
  Transaction tx = session.begingTransaction();
  ParentDAO.saveWithChild(p);
  tx.commit();

  Session session1 = MysessionImplementation.getSession();
  //now it is right to call child table in here?
   Child c1fromdb = (Child)session1.get(ChildClass.class,c1.getID());
   Child c2fromdb = (Child)session1.get(ChildClass.class,c2.getID());
   //parent asserts goes here 
   //children asserts goes here.
}

我不知道,但我觉得这样做不舒服。有没有更好的方法? 你将如何检查这些东西?谢谢阅读。 ;)

最佳答案

你可以改为:

public void testSaveWithChild() {
  Child c1 = new Child("prop1", "prop2", prop3);
  Child c2 = new Child("prop4", "prop4", prop3);
  Parent p = new Parent("prop6","prop7");
  p.addChild(c1);
  p.addChild(c2);
  Session session = MysessionImplementation.getSession();
  Transaction tx = session.begingTransaction();
  ParentDAO.saveWithChild(p);
  tx.commit();

  Session session1 = MysessionImplementation.getSession();
  Parent p2 = session1.get(ParentClass.class,p.getID());
  // children from db should be in p2.getChildren()
}

这样,至少您不会混合 DAO。

关于java - 测试 hibernate 父/子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1234053/

相关文章:

java - Hibernate 表未映射但表存在

java - 如何在@ManyToOne 字段上创建@Index?

java - 即使启动新线程,SWT UI 也会挂起

java - 设置 createDatabaseIfNotExist=true 后,Liquibase 未创建数据库

javascript - BeforeAll 与 BeforeEach。什么时候使用它们?

java - 验证方法调用而不在 Spy 上执行其实际实现

c# - 我如何使用最小起订量模拟一个集合

java - Hibernate 级联类型还是其他类型?

java - 具有捕捉效果的水平 ScrollView

java - 使用 Java 8 Stream 读取文本文件 block