2015-11-16 10 views
7

mam test tak:Jak uniknąć buforowanie udziałów w jednostkach w Spring Repository podczas transakcji do testów

@Transactional 
@Test 
public void addRemoveTest() { 
    MyEntitiy entity = new MyEntitiy(); 

    entity = textureRepository.saveAndFlush(entity); 
    TestTransaction.flagForCommit(); 
    TestTransaction.end(); 
    TestTransaction.start(); 
    final MyEntitiy loadedTexture = myEntityRepository.findOne(entity .getId()); 
} 

To działa perfekcyjnie. Ale po usunięciu kodu zatwierdzającego dla transakcji repozytorium nie wywoła bazy danych podczas wywoływania metody findOne(). Czy mogę jakoś zmusić go do wywołania bazy danych moich testów?

Preferuję mój test, aby nie dokonywać żadnych transakcji.

Nie mogę pobrać sesji, aby wyczyścić pamięć podręczną. I nie jestem nawet pewien, czy oczyszczenie sesji pomogłoby.

+0

Jeden worarround jest użycie 'FindAll()', ponieważ ja po prostu chcę, aby moje UserType bycia wykonany, który działa dla mnie :) – Tarion

Odpowiedz

10

Jedyny znany mi sposób to zadzwonić pod numer entityManager.clear() przed wywołaniem wyszukiwarki. Myślę, że można autowire się EntityManager do testu:

@Autowired 
private EntityManager entityManager; 

testu będzie wtedy wyglądać tak:

@Transactional 
@Test 
public void addRemoveTest() { 
    MyEntitiy entity = new MyEntitiy(); 

    entity = textureRepository.saveAndFlush(entity); 
    entityManager.clear(); 
    final MyEntitiy loadedTexture = myEntityRepository.findOne(entity .getId()); 
} 
Powiązane problemy