Daher entwickle ich einige datenbankgesteuerte RESTful Java-Webdienste mit Hibernate und MySQL. Zu Testzwecken verwende ich die H2-In-Memory-Datenbank. H2 ist schön und schnell, also hat das sehr gut geklappt. Das einzige Problem ist, dass das Auffüllen der DB-Tabellen vor meinen Tests etwas mühsam ist. Grundsätzlich erstelle und behalte ich eine Reihe von Objekten von Hand. Ich frage mich, ob ich vielleicht den falschen Weg gehe.
Bitte sagen Sie mir, was sind die besten Methoden, um das zu tun, was ich versuche? Irgendwelche Tools, die mir helfen könnten? Irgendwelche allgemeinen Strategien oder Tipps?
Vielleicht würden Sie davon profitieren, wenn Sie in Ihren automatisierten Komponententests ein spöttisches Framework verwenden?
Es stehen verschiedene zur Auswahl:
Mockito
JMock
EasyMock
PowerMock
quelle
Alles, was Sie wirklich tun können, ist, Objekte von Hand beizubehalten oder eine vorgefertigte Datenbank zu haben, die Sie laden. Sie müssen auch sicherstellen, dass die Datenbank nach jedem Test zurückgesetzt wird.
In einem Projekt, an dem ich arbeite, bin ich neu in Hibernate, daher habe ich eine Reihe von Tests für grundlegende Beziehungs- und Kaskadenoperationen. Mit TestNG habe ich eine
GenericHbTest
Klasse, von der alle Hibernate-Tests ausgehen. Es verfügt über eine@BeforeMethod
Methode zum erneuten Exportieren des Datenbankschemas und einige Dienstprogrammmethoden zum Generieren verschiedener DAO-Objekte. Dadurch kann ich für jeden Test eine Umgebung anpassen.Der einzige Nachteil beim erneuten Exportieren des Schemas bei jedem Test besteht darin, dass das Ausführen der Tests sehr lange dauert. Aber ich muss nur sicher sein, dass alles getrennt und sauber ist. Wenn Sie mehr Erfahrung mit dem Ruhezustand haben und ein stabileres Schema haben, ist ein erneuter Export vor jedem Test wahrscheinlich nicht erforderlich. Zumindest aber vorher alle Tabellen löschen
quelle
Haben Sie über eine Objekt-Serialisierung nachgedacht? Dies ist die schnellste und einfachste Methode, die ich verwendet habe.
Es besteht darin, den gewünschten Status zu erstellen und auf die Festplatte zu serialisieren. Mit diesen Dateien füllen Sie die In-Memory-Datenbank, die Sie für Ihre Tests verwenden.
Einer der Vorteile ist, dass Sie die Dateien später manuell bearbeiten können.
Wenn Sie in Ihren Komponententests gut organisiert sind, können Sie alternativ Objektgeneratoren erstellen. Wenn die Tests starten, wird die Datenbank instanziiert und das Schema exportiert (mit nHibernate). Objekte werden generiert und in der Datenbank ausgefüllt.
Diese Methode hat einen Vorteil gegenüber der ersten: Ihre Objektgeneratoren entwickeln sich mit Ihrem Code weiter, sodass Sie sich nicht wie im vorherigen Vorschlag um Ihre Dateien kümmern müssen.
quelle