Транзакционные тесты с Spring @ContextConfiguration - устранение проблем с базой данных - PullRequest
2 голосов
/ 26 апреля 2011

Я запускаю свои тесты DAO в классе тестирования JUnit, к которому прикреплены соответствующие аннотации @ContextConfiguration и @RunWith. Индивидуальные тесты помещают некоторые данные в базу данных и проверяют работоспособность. Ожидается, что после этого они очистят состояние базы данных. Есть простой способ - пометить методы / класс как @Transactional, затем методы выполняются внутри транзакции и происходит откат, как и должно быть.

Проблема в том, что этот подход к тестированию DAO не полностью имитирует среду. Скажем, у меня есть несколько загруженных ленивых полей коллекции в моей сущности JPA. В моем коде контроллера я получаю эту сущность с помощью вызова myDao.getMyEntity (id) и перебираю ленивую коллекцию. Во время выполнения приложения я получаю исключение LazyInitializationException, но в моем тесте этого не произойдет, так как он фактически транзакционный. Как запустить мои тесты, когда тесты не являются @Transactional, но данные по-прежнему очищаются в конце теста?

Я использую HSQLDB в памяти для тестов, если это имеет значение.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Вы не должны использовать @Transactional в своих методах тестирования, я предполагаю, что ваши методы уровня обслуживания и / или методы DAO имеют это.Используйте @Rollback для ваших методов тестирования, чтобы ваша база данных была очищена после выполнения тестов.

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/test/annotation/Rollback.html

1 голос
/ 26 апреля 2011

Я бы прочитал это, чтобы начать, http://static.springsource.org/spring/docs/3.0.x/reference/testing.html#testcontext-tx

В тех случаях, когда я тестирую фактический доступ к данным, я обычно использую DBUnit для загрузки данных перед тестом, а затем для его очистки. В этих тестах я не использую аннотацию @Transactional, потому что хочу увидеть, как мои тестируемые классы действительно взаимодействуют с базой данных, а не как они работают внутри среды тестирования.

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