Ich habe eine Klasse, die eine Reihe von Objekten (mit XML-Serialisierung) serialisiert, die ich Unit-Test wollen.Gibt es einen Punkt Unit Unit Serialisierung testen?
Mein Problem ist, es fühlt sich an, als würde ich die .NET-Implementierung der XML-Serialisierung testen, anstatt irgendetwas Nützliches. Ich habe auch ein leichtes Huhn-und-Ei-Szenario, in dem ich, um den Reader zu testen, eine vom Writer produzierte Datei dazu benötige.
denke ich, die Fragen (es 3 ist, aber sie alle beziehen sich) Ich bin auf der Suche letztlich für Feedback zu sind:
- Ist es möglich, den Writer zu testen, ohne den Reader?
- Was ist die beste Strategie zum Testen des Lesers (XML-Datei? Mocking mit Aufnahme/Wiedergabe)? Ist es der Fall, dass Sie wirklich nur Eigenschaftswerte der Objekte testen, die deserialisiert wurden?
- Was ist die beste Strategie zum Testen des Schreibers!
Hintergrund Informationen über XML-Serialisierung
Ich bin kein Schema verwenden, so dass alle XML-Elemente und Attribute passen die Eigenschaften der Objekte. Da es kein Schema gibt, werden Tags/Attribute, die nicht mit den Eigenschaften der einzelnen Objekte übereinstimmen, vom XmlSerializer einfach ignoriert (der Wert der Eigenschaft ist also null oder Standard). Hier ist ein Beispiel
<MyObject Height="300">
<Name>Bob</Name>
<Age>20</Age>
<MyObject>
Karte würde
public class MyObject
{
public string Name { get;set; }
public int Age { get;set; }
[XmlAttribute]
public int Height { get;set; }
}
und umgekehrt. Wenn das Objekt in den unteren Bereich geändert wird, wird die XML-Datei immer noch erfolgreich deserialisiert, aber FirstName ist leer.
public class MyObject
{
public string FirstName { get;set; }
public int Age { get;set; }
[XmlAttribute]
public int Height { get;set; }
}
eine ungültige XML-Datei würde richtig, damit die Einheit deserialisieren Test bestehen würde, wenn man Aussagen über den Werten des MyObject lief.
Es hatte ursprünglich ein Schema, und lesen + schreiben wurde von meiner eigenen Klasse, die das Objekt Diagramm geschrieben. Ich habe dann (1 Jahr später!) Entdeckt, dass die ganze Arbeit vom XmlSerializer erledigt werden konnte. In Bezug auf die Rückwärtskompatibilität würde ich sagen, dass das XML an die Assembly-Version gebunden wäre, mit der es geschrieben wurde. Wenn Sie also der letzten Version der Assembly XML-Dateien aus früheren Versionen gaben, besteht die Möglichkeit, dass sich das Objektmodell geändert hat und nicht mehr übereinstimmt. Ich bin mir nicht sicher, dass das jemals passieren wird, aber ich kann nicht sehen, wie (Fortsetzung) –
Sie ein älteres Format deserialisieren (wie Jon erwähnt), ohne dass es immer bricht und es manuell mit durchführen muss ein XmlReader? –
XmlSerializer löscht unerwartete Daten ohne Fehler, oder Sie können die '[XmlAny *]' verwenden - so gibt es Möglichkeiten, ein Objekt * teilweise * zu deserialisieren (und die anderen Daten von den "beliebigen" Requisiten zu erhalten). –