0
我想測試我的PreUpdateEventListener流,但我似乎無法使其在JUnit測試中工作。我沒有收到任何錯誤,但代碼沒有被調用。未在單元測試中調用Hibernate的PreUpdateEventListener
我PreUpdateEventListener:
@Component
public class CandidateListener implements PreUpdateEventListener {
@Autowired
EntityManagerFactory entityManagerFactory;
@PostConstruct
private void init() {
HibernateEntityManagerFactory hibernateEntityManagerFactory = (HibernateEntityManagerFactory) this.entityManagerFactory;
SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) hibernateEntityManagerFactory.getSessionFactory();
EventListenerRegistry registry = sessionFactoryImpl.getServiceRegistry().getService(EventListenerRegistry.class);
registry.appendListeners(EventType.POST_LOAD, this);
registry.appendListeners(EventType.PRE_UPDATE, this);
}
@Override
public boolean onPreUpdate(PreUpdateEvent event) {
final Object entity = event.getEntity();
if (entity == null) return false;
// code here not being called in unit tests, but works fine on server
return false;
}
}
測試:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
@Transactional
public class CandidateListenerTest {
@Autowired
CandidateRepository candidateRepository;
@Autowired
EntityAuditEventRepository entityAuditEventRepository;
@Autowired
SessionFactory sessionFactory;
@Test
public void testHistoryLogging() {
Candidate cand = new Candidate();
cand.setEmail("[email protected]");
cand.setFirstName("12");
cand.setLastName("3");
cand = candidateRepository.save(cand);
cand.setLastName("34");
candidateRepository.save(cand);
assertEquals(entityAuditEventRepository.findAll().size(), 1);
}
}
我試圖注入的SessionFactory到測試和調用的SessionFactory#flush方法,但拋出No CurrentContextSession
錯誤,我似乎不能修理。