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

S

sirbender

Top Contributor
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

Top Contributor
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

Top Contributor
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

Top Contributor
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

Top Contributor
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

Top Contributor
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

Top Contributor
Inwieweit hast du das komplexe Objekt, daß du serialisieren willst, denn selber verstanden? Das erscheint mir für dein weiteres Vorhaben notwendig zu sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Habt ihr mir ein paar Lerntipps für Java? Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
R bei eclipse von java in eine andere programmiersprache wechseln? Allgemeine Java-Themen 2
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
A Best Practice Java - eine Art Plugin-Struktur Allgemeine Java-Themen 3
S wie rufe ich mit .jar datei eine .bat auf? Allgemeine Java-Themen 15
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
E Methoden Hat jemand eine gute Lösung? Allgemeine Java-Themen 5
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
0 Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
Tausendsassa Interface Eine Gui von einer anderen schließen lassen Allgemeine Java-Themen 3
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3
S Best Practice Brauche eine Idee für eine Java Projekt! Allgemeine Java-Themen 11
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
V Gibt es eine Möglichkeit die Internet auslastung mit Java auszulesen Allgemeine Java-Themen 11
L Drop Emails von Outlook in eine JList Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
P Dezimalzahl in eine Binärzahl umrechnen Allgemeine Java-Themen 12
M Eine static-Methode verlassen Allgemeine Java-Themen 2
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
T Input/Output Daten in eine Datei schreiben Allgemeine Java-Themen 4
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
M Eclipse Eine xhtml aus einem JSF Projekt starten Allgemeine Java-Themen 2
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
Sogomn Klassen Alle in eine Klasse Allgemeine Java-Themen 11
S Eine Klasse die jeden String nur einmal annimmt Allgemeine Java-Themen 4
J Fehler beim parsens eine Datums Allgemeine Java-Themen 3
L Leerzeichen zu string hinzufügen, um eine gerade zahl zu erhalten Allgemeine Java-Themen 9
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
A Eine Spezifikation für meine Bachelorarbeit! Allgemeine Java-Themen 3
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
O Prüfen ob String eine Zahl mit maximal 2 Nachkommastellen ist Allgemeine Java-Themen 4
X Schauen ob eine bestimmte .exe geöffnet ist Allgemeine Java-Themen 7
C Eine Frage zur Bearbeitungszeit Allgemeine Java-Themen 8
M Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
J kann eine .jar sich selbst verschieben? Allgemeine Java-Themen 6
S Swing Text in eine JTextArea schreiben Allgemeine Java-Themen 17
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
P Sinnfragen, um eine riesige Verzeichnisstruktur zu durchsuchen und zu verarbeiten Allgemeine Java-Themen 20
A eine test thread.join() frage Allgemeine Java-Themen 2
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S Datentypen Eine Variable von String zu Int ändern Allgemeine Java-Themen 5
L Eine jar verwenden, die intern auf eine andere jar zugreift Allgemeine Java-Themen 7
B JAR Datei führt eine andere JAR Datei aus Allgemeine Java-Themen 2
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
H Eine .java-Datei aus der Windowskommandozeile komplilieren - wie? Allgemeine Java-Themen 7
I Eine Zahlenreihe zu Intervallen zusammenfassen Allgemeine Java-Themen 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben