单元测试fetchtype lazy

时间:2011-07-28 07:48:01

标签: hibernate spring

我有以下代码:

@Entity
public class Foo {

@OneToMany(mappedBy = "Foo", fetch = FetchType.LAZY)
    @Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
private Collection<Bar> bars;
}

@Entity
public class Bar {

@ManyToOne
private Foo foo;
}

我正在尝试对DAO类进行单元测试。

@Transactionl
public class TestDao {

@Test
public void testLazy (){
Foo foo = dao.findById(1);
assertTrue(foo.getBars() != null && !foo.getBars().isEmpty())
//SOME CODE THAT I NEED YOUR HELP WITH
assertTrue(foo.getBars() == null || foo.getBars().isEmpty())
}

@Test
test1...

@Test
test2...

@Test
test3...

}

我需要帮助搞清楚//我需要帮助的一些代码// 需要通过这个测试。

感谢您的帮助 Netta

1 个答案:

答案 0 :(得分:2)

所以你想测试第一次访问集合时是否懒得加载bars集合?

我通过实施两项测试做了类似的事情。一个测试用于检查集合的正确大小(如果数据是惰性加载的),另一个测试用于检查在分离后访问集合时抛出的特定异常。

与此类似的东西(JPA / Hibernate + TestNG)

@Test
public void testLazyLoading() {

  // load foo
  Foo foo = dao.findById(1);

  // check correct size
  assertTrue(foo.getBars() != null && !foo.getBars().isEmpty())

}

@Test(expectedExceptions=LazyInitializationException.class)
public void testLazyInitializationException() {

  // load foo
  Foo foo = dao.findById(1);

  // detach all instances
  entityManager.clear();

  // will throw LazyInitializationException
  foo.getBars().size();

}