Eu tenho algo parecido com isto:
public byte[] EncodeMyObject(MyObject obj)
Eu tenho testado em unidade assim:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDIT: As duas maneiras que eu vi propostas são:
1) Usando valores esperados codificados, como no exemplo acima.
2) Usando um decodificador para decodificar a matriz de bytes codificados e comparando os objetos de entrada / saída.
O problema que vejo no método 1 é que ele é muito quebradiço e requer muitos valores codificados.
O problema com o método 2 é que o teste do codificador depende do funcionamento correto do decodificador. Se o codificador / decodificador for quebrado igualmente (no mesmo local), os testes poderão produzir falsos positivos.
Essas podem muito bem ser as únicas maneiras de testar esse tipo de método. Se for esse o caso, tudo bem. Estou fazendo a pergunta para ver se existem estratégias melhores para esse tipo de teste. Não consigo revelar as partes internas do codificador específico em que estou trabalhando. Em geral, estou perguntando como você resolveria esse tipo de problema e não acho que os internos sejam importantes. Suponha que um determinado objeto de entrada sempre produza a mesma matriz de bytes de saída.
myObjectvai demyObjectpara{ 0x01, 0x02, 0xFF }? Esse algoritmo pode ser dividido e testado? A razão pela qual pergunto é atualmente, parece que você tem um teste que prova que uma coisa mágica produz outra coisa mágica. Sua única confiança é que a única entrada produz a única saída. Se você pode quebrar o algoritmo, pode ganhar mais confiança no algoritmo e ser menos dependente de entradas e saídas mágicas.