Тесты Junit не проходят случайным образом при использовании менеджера баз данных и сущностей - PullRequest
2 голосов
/ 14 января 2010

Я пытаюсь написать большой тестовый класс.

Я использую базы данных Junit, Hibernate, TopLink и H2. До этого я использовал EJB3Unit (включая Hibernate и H2).

В моем тестовом классе 57 тестовых методов. Если я запускаю все тесты сразу, один или несколько тестов оказываются неудачными. Если я запускаю каждый тест в одиночку, я не получаю ошибки.

Кто-нибудь знает, что происходит не так? И как я могу предотвратить это?

  1. Для каждого метода тестирования я создаю новую базу данных в памяти с другим именем.
  2. Я создаю новый экземпляр entitymanagarfactory и entitymanagar.
  3. Я отключил кэширование второго уровня.
  4. Я создаю всю таблицу с помощью скрипта (ошибки не возникает, поэтому база данных действительно свежая).
  5. Я делаю некоторые действия с БД и проверяю.
  6. Я очищаю сессию и их.
  7. Я сбрасываю все объекты в моей базе данных в памяти
  8. Я закрыл базу данных
  9. Я закрываю em и emf.

Должен ли я сделать больше?

Большое спасибо ...

Ответы [ 2 ]

1 голос
/ 14 января 2010

Кажется, что между тестами есть зависимость. в идеале вы должны восстанавливать базу данных до ее исходного состояния после каждого теста, используя метод tearDown (в JUnit 4 используйте аннотацию @After).

Если вы уже делаете это, то зависимость более тонкая. Чтобы выяснить его причину, я предлагаю вам начать бинарный поиск по тестам: закомментируйте половину ваших тестов. Если случайный сбой сохраняется, закомментируйте половину оставшейся половины (и т. Д.). Если сбой исчезает, то проблема в другой половине: раскомментируйте и закомментируйте вторую половину. Этот процесс будет сходиться довольно быстро.

Удачной охоты.

0 голосов
/ 12 февраля 2010

Зависимости возможны для этого случайного сбоя.

Другой причиной может быть порядок элементов в коллекции. Однажды я писал тест и зависел от первого элемента. Это не было отсортировано, поэтому я не был уверен, что объект, который я спрашивал, всегда был одним и тем же.

...