Wie wird PersistenceContext während des Komponententests injiziert?

8

Das ist meine Java-Klasse:

%Vor%

Dies ist der Komponententest:

%Vor%

Das Testen schlägt mit NullPointerException fehl, da Finder.em von niemandem injiziert wird. Wie soll ich mit dieser Situation richtig umgehen? Gibt es Best Practices?

    
yegor256 27.09.2010, 20:35
quelle

2 Antworten

7

Ohne einen Container wie Spring (oder etwas wie Untils - das auf Spring basiert), müssen Sie den Entity Manager manuell injizieren . In diesem Fall könnten Sie etwa so etwas als Basisklasse verwenden:

%Vor%     
Pascal Thivent 27.09.2010, 21:29
quelle
3

Es hängt von was Sie testen möchten. Wenn Sie eine komplexe Geschäftslogik in Ihrer Finder -Klasse haben, möchten Sie vielleicht die EntityManager vortäuschen - indem Sie ein spöttisches Framework wie EasyMock oder Mockito - um diese Logik zu testen.

Jetzt, da dies nicht der Fall ist, vermute ich, dass Sie die Persistenz der Entität Employee testen wollen (dies wird oft als Integrationstest bezeichnet). Dies erfordert die Verwendung einer Datenbank. Um Tests zu vereinfachen und Ihre Tests portabel zu halten, können Sie zu diesem Zweck eine In-Memory-Datenbank wie die HSQLDB verwenden. Um HSQLDB zu starten, erstellen Sie einen Persistenzkontext und fügen Sie diesen Kontext in Ihre Finder-Klasse ein. Es empfiehlt sich daher, ein IoC-Framework wie Spring zu verwenden.

Es gibt Unmengen an Tutorials im Internet, die erklären, wie man JPA / Spring / HSQLDB benutzt. Sehen Sie sich dieses Beispielprojekt an: Integrationstests mit Maven 2, Spring 2.5, JPA, Hibernate und HSQLDB

    
Richard Kettelerij 27.09.2010 20:58
quelle

Tags und Links