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