我有以下代码:
@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
答案 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();
}