Ich habe so etwas:
public byte[] EncodeMyObject(MyObject obj)
Ich habe Unit-Tests wie folgt durchgeführt:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDIT: Die zwei Möglichkeiten, die ich vorgeschlagen habe, sind:
1) Verwenden Sie fest codierte Erwartungswerte wie im obigen Beispiel.
2) Verwenden eines Decoders zum Decodieren des codierten Bytearrays und Vergleichen der Eingabe- / Ausgabeobjekte.
Das Problem, das ich bei Methode 1 sehe, ist, dass es sehr spröde ist und viele hartcodierte Werte erfordert.
Das Problem bei Methode 2 besteht darin, dass das Testen des Encoders davon abhängt, ob der Decoder ordnungsgemäß funktioniert. Wenn der Codierer / Decodierer gleichmäßig (an derselben Stelle) defekt ist, können die Tests zu falsch positiven Ergebnissen führen.
Dies sind möglicherweise die einzigen Möglichkeiten, um diese Art von Methode zu testen. Wenn das der Fall ist, dann gut. Ich stelle die Frage, ob es bessere Strategien für diese Art von Tests gibt. Ich kann die Interna des jeweiligen Encoders, an dem ich arbeite, nicht preisgeben. Ich frage im Allgemeinen, wie Sie diese Art von Problem lösen würden, und ich halte die Interna nicht für wichtig. Angenommen, ein bestimmtes Eingabeobjekt erzeugt immer dasselbe Ausgabebyte-Array.
myObject
weitermyObject
nach{ 0x01, 0x02, 0xFF }
? Kann dieser Algorithmus aufgeschlüsselt und getestet werden? Der Grund, den ich frage, ist derzeit, es sieht so aus, als hätten Sie einen Test, der beweist, dass eine magische Sache eine andere magische Sache hervorbringt. Ihr einziges Vertrauen ist, dass der eine Eingang den einen Ausgang erzeugt. Wenn Sie den Algorithmus aufschlüsseln können, können Sie weiteres Vertrauen in den Algorithmus gewinnen und weniger auf magische Ein- und Ausgänge angewiesen sein.