Ho qualcosa del genere:
public byte[] EncodeMyObject(MyObject obj)
Sono stato test di unità in questo modo:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDIT: I due modi che ho visto proposti sono:
1) Utilizzo di valori previsti codificati, come nell'esempio sopra.
2) Utilizzo di un decodificatore per decodificare l'array di byte codificato e confrontare gli oggetti di input / output.
Il problema che vedo con il metodo 1 è che è molto fragile e richiede molti valori codificati.
Il problema con il metodo 2 è che il test dell'encoder dipende dal corretto funzionamento del decoder. Se l'encoder / decodificatore si rompono allo stesso modo (nello stesso posto), i test potrebbero produrre falsi positivi.
Questi potrebbero benissimo essere gli unici modi per testare questo tipo di metodo. Se è così, allora va bene. Sto ponendo la domanda per vedere se ci sono strategie migliori per questo tipo di test. Non riesco a rivelare gli interni dell'encoder particolare su cui sto lavorando. Sto chiedendo in generale come risolveresti questo tipo di problema e non credo che gli interni siano importanti. Supponiamo che un determinato oggetto di input produca sempre lo stesso array di byte di output.
myObjectva damyObjecta{ 0x01, 0x02, 0xFF }? Tale algoritmo può essere scomposto e testato? Il motivo per cui ti chiedo è attualmente, sembra che tu abbia un test che prova che una cosa magica produce un'altra cosa magica. La tua unica certezza è che l'unico input produce l'unico output. Se riesci a scomporre l'algoritmo, puoi acquisire ulteriore fiducia nell'algoritmo ed essere meno dipendente da input e output magici.