2013-04-23 14 views
5

Obecnie używam poniższego po każdym teście, który mam w swoim pakiecie testowym. Powoduje jednak, że jest bardzo powolny, ponieważ H2 musi przeładować kontekst aplikacji po każdym teście. Czy istnieje szybszy sposób na wyczyszczenie wszystkich moich obiektów, więc nie mam przeniesienia między testami?Prawidłowy test tearDown Hibernate z H2

@org.junit.After 
public void tearDown() throws Exception { 
    context.close(); 
} 
+0

dlaczego po prostu nie wycofujesz transakcji po zakończeniu każdego testu? coś takiego jak http://stackoverflow.com/questions/7618914/spring-integration-test-does-not-roll-back – ilcavero

+1

Jeśli A było dla ciebie dobre, czy mógłbyś to zaakceptować? Zmienia status z otwartego. Thx –

+0

byłoby miło zobaczyć import/tworzenie instancji 'context'. –

Odpowiedz

7

Spróbuj context.clear()

EntityManager.clear: Usuń kontekst trwałości, powodując wszystkich zarządzanych podmiotów do odkleiła. Zmiany wprowadzone w jednostkach, które nie zostały przepłukane w bazie danych, nie będą zachowane.

Session.clear: Całkowicie wyczyść sesję.

Ponadto można upewnić się, że menedżer encji/sesja użyta w każdym teście jest identyczny, wprowadzając wzorzec singletowy. I możesz użyć dynamicznego skryptu SQL do wyczyszczenia danych ze wszystkich tabel. Oba opisane w PersistenceHelper here.

+0

Glen, przepraszam, że tak długo trwało, to załatwiło sprawę. – zmanc