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