Speichern Objekt in Debug- und als verwenden Sie es als Stummel in Tests
-
05-07-2019 - |
Frage
Meine Anwendung stellt eine Verbindung zu db und bekommt Baum von Kategorien von hier. Im Debug-Regime kann ich diesen großen Baum Objekt sehen, und ich dachte nur, der Fähigkeit, auf der Festplatte dieses Objekt irgendwo speichern in Test-Stubs zu verwenden. Wie folgt aus:
mockedDao = mock(MyDao.class);
when(mockedDao.getCategoryTree()).thenReturn(mySavedObject);
mySavedObject
Unter der Annahme, - ist riesig genug, so dass ich nicht will, dass es manuell generieren oder spezielle Generation Code schreiben. Ich möchte nur in der Lage sein, um es während des Debug-Sitzung irgendwo serialisiert und speichern Sie es deserialisieren und übergeben Tests thenReturn
.
Gibt es eine standardisierte Möglichkeit, dies zu tun? Wenn nicht, wie ist besser, solchen Ansatz zu implementieren?
Lösung
I tun lieben Ihre Idee, es ist genial!
Ich bin mir nicht bewusst, eine Bibliothek, die diese Funktion aus der Box bieten würde. Sie können mit ObjectOutoutStream
und ObjectInputStream
(dh die Standard-Java-Serialisierung) versuchen, wenn Ihre Objekte alle Seriablizable
implementieren. Normalerweise tun sie es nicht. In diesem Fall könnten Sie mehr Glück mit XStream oder einer seiner Freunde.
Andere Tipps
Wir spotten in der Regel die gesamte DB solche Szenarien sind, die Wiederverwendung (und Prüfung implizit), um den Code, um die Kategorien aus der DB zu laden.
Insbesondere unsere Unit-Tests laufen gegen eine In-Memory-Datenbank ( hsqldb ) , die initialisieren wir vor jedem Test ausführen, indem Testdaten zu importieren.
Haben Blick auf Dynamische Managed Beans - dies bietet eine Möglichkeit, Werte eines laufenden zu ändern Java-Anwendung. Vielleicht gibt es einen Weg ein MBean zu definieren, die Ihren Baum hält, um den Baum lesen, speichert sie irgendwo und injiziert es später noch einmal.