Ich stoße häufig auf Situationen, in denen ich den Inhalt eines großen Objektdiagramms (Laufzeit oder Debugging) in einer Reihe von Anweisungen speichern möchte, die dieses Objektdiagramm neu erstellen. Dies kann dann als Testdaten in Unit-Testfällen verwendet werden.Codegenerierung verwenden, um Testdaten zu generieren
genommen, daß Blätter des Objektgraphen sind Standardtypen (String
, BigDecimal
, Date
, usw.) und die Zweige folgen der bean convention (Getter, Setter, leeren Konstruktor), sollte es möglich sein, zu erzeugen, diese Art von Datei (zB TestData.java):
public static Car createCar() {
Wheel wheel1 = new Wheel();
wheel1.setTypePressure(2.1f);
Wheel wheel2 = new Wheel();
wheel2.setTypePressure(2.3f);
Wheel wheel3 = new Wheel();
wheel3.setTypePressure(2.0f);
Wheel wheel4 = new Wheel();
wheel4.setTypePressure(2.8f);
List<Wheel> wheels = new ArrayList<>(Arrays.asList(wheel1, wheel2, wheel3, wheel4));
Brake brake = new Brake();
brake.setBrakeType(BrakeType.PLAIN);
Car car = new Car();
car.setBrake(brake);
car.setWheels(wheels);
car.setColor("blue");
return car;
}
Es wäre wirklich toll, das irgendwie direkt in eine Debug-Sitzung zu stopfen, aber ein paar Drop-in-Anweisungen als Folge des „Java-Objekt der Diagrammerstellung Code schreiben mit Inhalt "Ausgabe an System.out
würde auch funktionieren.
Also, wie kann ich das auf die effizienteste Weise realisieren?
Ich stimme zu. Ich schlage auch vor, ein einfaches Beispiel von, sagen wir, GSON bei der Arbeit fallen zu lassen. Es ist unglaublich, was man mit einem One-Liner machen kann, und es wird wahrscheinlich OP mehr als nur sagen, dass es einfach ist. – tucuxi
Wenn es keine Out-of-the-Box-Lösung gibt, werde ich JSON versuchen. Meine einzige Sorge ist, dass Daten, die in einer separaten JSON-Datei von Ihrem (Junit) Test-Code aufbewahrt werden, nicht refactoring unterzogen werden. Ergo: Wenn sich mein Modell ändert (Attributnamen, Entitätsnamen), wird der Refactor automatisch die Java-Lösung angehen. Gib zu: Wenn sich die Struktur ändert, habe ich sowieso ein Problem. – sjaak
@tucuxi. Ich habe gerade an meinem kleinen Beispiel versucht. Es ist wirklich erstaunlich. – sjaak