2013-04-23 5 views
5

Momentan benutze ich das unten nach jedem Test, den ich in meiner Testsuite habe. Es ist jedoch sehr langsam, da H2 den Anwendungskontext nach jedem Test neu laden muss. Gibt es einen schnelleren Weg, um alle meine Objekte zu löschen, so dass ich zwischen den Tests keine Übertragungen habe?Proper tearDown Hibernate Test mit H2

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

Warum rollen Sie die Transaktion am Ende jedes Tests nicht einfach zurück? etwas wie http://stackoverflow.com/questions/7618914/spring-integration-test-does-not-roll-back – ilcavero

+1

Wenn das A für dich gut war, konnten Sie es annehmen? Ändert den Status von "Öffnen". Thx –

+0

wäre schön, den Import/Instanziierung von 'Kontext' zu sehen. –

Antwort

7

context.clear()

EntityManager.clear Versuchen: Löschen der Persistenzkontext alle verwalteten Einheiten verursacht abgelöst werden. Änderungen an Entitäten, die nicht in die Datenbank übertragen wurden, werden nicht beibehalten.

Session.clear: Löschen Sie die Sitzung vollständig.

Sie können auch sicherstellen, dass der in jedem Test verwendete Entity Manager/Session identisch ist, indem Sie ein Singleton-Muster implementieren. Und Sie können ein dynamisches SQL-Skript verwenden, um Daten aus allen Tabellen zu löschen. Beide sind unter PersistenceHelper here beschrieben.

+0

Glen, tut mir leid, dass ich so lange gebraucht habe, das hat sich um das Problem gekümmert. – zmanc