Erweitertes Beispiel: Unitils mit Java Persistence API

Einleitung:

Dieses Beispiel soll JPA Tests mit Unitils veranschaulichen. Dafür wird das einführende Beispiel erweitert, um die Persistierung von dem "Object-Rational Mapping" (ORM) Framework Hibernate verwalten zu lassen. Unitils soll dabei die Konfiguration der Datenbank-Verbindung und Vorbereitung der Datenbank erleichtern.

Vorbereitung:

Als Basis dient das einführende Beispiel, das um eine "Persistence Unit", eine Unitils "properties" Datei, eine Entity Klasse "Ergebnis" und eine Testklasse mit zugehörigem DbUnit Datensatz erweitert wird. Außerdem müssen die entsprechenden Unitils Bibliotheken für JPA Tests mit eingebunden werden.

NetBeans Projekt Download.
Nach dem Öffnen des Projektes, muss eventuell die "unitils.properties" Datei an die verwendete Datenbank angepasst werden:

unitils.properties



Auch muss in der "persistence.xml" eine vorhandene und passende Datenquelle (Datenbank) ausgewählt sein.

persistence.xml



Testklasse: DBTests.java


Erklärung des Tests:

Der Test legt einen Entity Manager an und nutzt das JPA Framework zum Persistieren einer Gewinnzahl, verpackt in einem Entity Objekt, in der Datenbank. Als nächstes überprüft der Testfall, ob die Zahl tatsächlich in der Datenbank vorhanden ist. DbUnit sollte dabei den Datensatz aus DBTests.xml in die Datenbank laden, bevor der entsprechend annotierte Test ausgeführt wird.

Datensatz: DBTests.xml


Durchführung:

Der Testfall kann wie ein normaler JUnit Test ausgeführt werden.

Probleme:

Beim Durchführen der Tests stößt man auf einige Probleme. Die auf Annotationen basierende Initialisierung des Entity Managers verursacht Nullpointer-Exceptions. Dagegen hilft die Verwendung des "UnitilsHibernatePersistenceProvider".
Ein weiteres Problem taucht bei der gemeinsamen Verwendung von Hibernate JPA mit DbUnit auf. Die Frameworks scheinen sich gegenseitig zu blockieren und führen zum Scheitern des Tests. Aus diesem Grund ist die DbUnit Datenbankverwaltung in dem Testfall auskommentiert, bis eine Lösung gefunden wird.