JUnit - Lösche Eintrag in Datenbank und prüfe ob Eintrag gelöscht wurde

osion

Bekanntes Mitglied
Hallo

Situation: Per JUnit-Test (mit Spring Boot) soll ein Eintrag in der DB erzeugt werden und wieder gelöscht. Das erstellte Feld hat einen Fremdschlüssel, welcher zuerst wieder aufgehoben werden muss. Wird die Verbindung nicht aufgehoben, dann wirft die DB einen Fehler.

Problem: Ich habe die Klasse @Transactional gesetzt, dass nach dem Test wieder aufgeräumt wird. Ich habe versucht den Eintrag per entityManager.flush und .clear in die Datenbank zu bringen. Die Einträge kommen beim JUnit-Test nie in die DB, d. h. löschen geht immer ohne Probleme. Auch wenn ich kein @Transactional setze geht es nicht (andere Probleme).

Frage: Hatte jemand das Problem auch schon und hat eine Idee oder Lösung dazu, was man noch probieren kann?
 

Hansen_07

Bekanntes Mitglied
Für gewöhnlich sollte man Externe Komponenten bzw. Komponenten die man nicht selber geschrieben hat, nicht testen. Diejenigen die diese Komponenten erstellt haben, sollten sich dafür verantwortlich zeichnen, dass ihre Komponenten funktionieren. In deinem Falle also das ein Datensatz sauber in die DB gebracht wird und selbiger auch sauber wieder entfernt wird. Einzig das was man selber geschrieben hat, sollte getestet werden.
Wenn du Abhängigkeiten oder das Zusammenspiel mit anderen Komponenten testen möchtest, bedient man sich des sogenannten Mockings. Ein recht populäres Framework dafür wäre Mockito.
 

8u3631984

Bekanntes Mitglied
Du kannst einen ArgumentCaptor verwenden um zu überprüfen, ob in deiner Service Klasse die delete Methode des Repositories aufgerufen wird.
Wie Hansen_07 schon geschrieben hat, macht es keinen Sinn, die Funktonalität der DB zu testen
 

Neue Themen


Oben