Habt ihr eine Idee wie man Serializierung testen kann..?

Diskutiere Habt ihr eine Idee wie man Serializierung testen kann..? im Allgemeine Java-Themen Bereich.
Bitte aktiviere JavaScript!
S

sirbender

Ich will verifizieren ob Serialisierung (aktuell Standard Java ObjectOutputStream) wirklich das identische Objekt zurueckliefert. Dabei ist der ganze Code der die Objekte erzeugt nicht meiner. Die Objekte beinhalten sehr stark verschachtelte Datenstrukturen (AST von Code). Ein simples equals reicht da nicht aus, da nur an der Oberflaeche gekratzt wird ob bei den Objekten eine handvoll an Eigenschaften gleich sind.

Meine Idee ist, einfach ein normal erzeugtes Objekt zu serialisieren und wieder in ein neues Objekt zu deserialisieren und dann das alte und neue Objekt "bitgenau" zu vergleichen. Die Frage ist nur, wie kriege ich die Objekte in "bit-form" damit ich sie vergleichen kann? Gibt es da vielleicht irgendeinen Trick oder Mechanismus den ich nicht kenne? Kann die JVM selbst irgendwie aushelfen?

Ganz toll waere es natuerlich wenn ich dann sogar irgendwie aufspueren koennte wo die Objekte sich unterscheiden falls dies der Fall sein sollte. Also z.B. dass beim deserialisierten Objekt irgendwelche kleinen Interna durch das Serialisieren "vergessen" wurden oder dass beim Deserialisieren etwas schief laeuft.
 
L

LimDul

Die einzig sinnvolle Möglichkeit, die ich für so eine Anforderung sehe ist per Reflection ranzugehen und durchs gesamte Objektgeflecht zu traversieren und die Attribute, die dann am Ende Standarddatentypen haben, per equals zu vergleichen.

Allerdings ist die Frage "Warum?" Eigentlich ist das Aufgabe der JVM dafür zu sorgen, dass die Serialisierung richtig arbeitet und ich würde mich normalerweise auch drauf verlassen, dass sie dies tut.
 
W

White_Fox

Ich würde auch darauf verzichten, Serialisierung zu testen. Du testest damit Code, der nicht unter deiner Verantwortung steht.

Was du tun kannst, ist, deine richtige Implementierung der Serialisierung zu testen. Dazu sollte es aber reichen, ein einfacheres Objekt zu Serialisieren und wieder zu Deserialisieren.

Worauf du achten solltest, ist, daß sich deine serialisierten Klassen nicht mehr ändern. Es wäre mißlich, wenn du erst Daten irgendwo speicherst, dann im Laufe der Zeit dein Programm erweiterst, die betreffende Klasse erweiterst/Variablen umbenennst/... und dann ein Objekt einlesen willst, daß einem älteren Versionsstand der Klasse entspricht.
 
S

sirbender

Die Objektstruktur die ich serialisiere ist extrem komplex und wurde nicht von mir geschrieben. Die Serialisierung funktioniert ueber "Serializeable-Interfaces" samt readObjekt(ObjectInputStream), transienten Feldern, usw.

Ich hatte gehofft, dass es schon Frameworks gibt, die Objekte (Originalinstanzen und deserialisierte Instanzen) auf Gleichheit via Reflection testen und vielleicht auch allgemein die Klassen der Objekte analysieren eventuelle Probleme aufzeigen. Alleine schon z.B. wenn das zu serialisierende Objekt irgendwelche transienten Felder hat die auch tatsaechlich Werte aufweisen, die das deserialisierte Objekt dann nicht hat (kann ja auch sein, dass das so gewollt ist und diese Felder eh nur ueber einen Getter erreichbar sind, der dann die Felder auf korrekte Werte setzt).

Aber scheinbar gibt es ein solches Testframework nicht ;)
 
L

LimDul

Die Objektstruktur die ich serialisiere ist extrem komplex und wurde nicht von mir geschrieben. Die Serialisierung funktioniert ueber "Serializeable-Interfaces" samt readObjekt(ObjectInputStream), transienten Feldern, usw.

Ich hatte gehofft, dass es schon Frameworks gibt, die Objekte (Originalinstanzen und deserialisierte Instanzen) auf Gleichheit via Reflection testen und vielleicht auch allgemein die Klassen der Objekte analysieren eventuelle Probleme aufzeigen. Alleine schon z.B. wenn das zu serialisierende Objekt irgendwelche transienten Felder hat die auch tatsaechlich Werte aufweisen, die das deserialisierte Objekt dann nicht hat (kann ja auch sein, dass das so gewollt ist und diese Felder eh nur ueber einen Getter erreichbar sind, der dann die Felder auf korrekte Werte setzt).

Aber scheinbar gibt es ein solches Testframework nicht ;)
Wie auch?

Serialisierung garantiert dir, dass die Daten auf den nicht transienten Feldern nach serialisieren und einlesen wieder gleich sind.

Transiente Felder sind davon ausgenommen. Was mit denen passiert, hat nichts mehr mit Technik zu tun sondern mit Fachlichkeit und kann daher nicht generell getestet werden. Weil die sind ja bewusst transient, damit muss auch fachlich definiert werden, was beim speichern und laden damit passieren soll. Und das kann dir kein Technik-Tool abnehmen.
 
S

sirbender

Das mit den transienten Feldern war nur ein Beispiel wonach ein Framework suchen und in einem Report dem User praesentieren koennte.

Meine Probleme haben nichts mit transienten Feldern zu tun...das ist ja leicht zu checken.
 
W

White_Fox

Inwieweit hast du das komplexe Objekt, daß du serialisieren willst, denn selber verstanden? Das erscheint mir für dein weiteres Vorhaben notwendig zu sein.
 
Thema: 

Habt ihr eine Idee wie man Serializierung testen kann..?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben