Ich verwende Spring und JUnit, um einige Integrationstests für mein DAO zu schreiben. Ich stelle meine Testdaten am Anfang der Testmethode auf und teste meine DAO-Methoden später in derselben Testmethode. Das Problem ist, dass der EntityManager die gleiche Instanz der Entitäten zurückgibt, die ich gerade in meinem Datensetup erstellt habe, wenn ich die Transaktion nicht lege/festschreibe. Dadurch wird mein Test unbrauchbar, da er immer übergeben wird.Commit/Flush-Transaktionen während des Komponententests?
z.
@Test
@Transactional()
public void loadTreeBasicCase() {
// creates and saved node to DB
Node n = createNode();
// test DAO
Node result = dao.lookup(n.getId());
// verify
assertThat(n, equalTo(result));
}
Eine Möglichkeit besteht darin, Methoden commit() und/oder flush() in meinem DAO verfügbar zu machen. Aber das würde ich lieber nicht machen, weil dies im Produktionscode fast nie passieren muss (lassen Sie EntityManager das machen). Gibt es eine Möglichkeit, dies über Annotationen oder in Spring Config zu konfigurieren? Ich benutze Spring, JPA2 mit Hibernate.
Natürlich, danke für die Erinnerung an mich. Ich bin so daran gewöhnt, den Entity Manager über die DAOs zu benutzen, den ich vergessen habe. Ich kann ihn einfach in meinen Test einbinden, um ihn direkt anzurufen. :) – citress