Модульное тестирование fetchtype lazy - PullRequest
1 голос
/ 28 июля 2011

У меня есть следующий код:

@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 Ответ

2 голосов
/ 28 июля 2011

Итак, вы хотите проверить, загружается ли коллекция 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();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...