Tengo algo como esto:
public byte[] EncodeMyObject(MyObject obj)
He estado haciendo pruebas unitarias como esta:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDITAR: Las dos formas que he visto propuestas son:
1) Usar valores esperados codificados, como el ejemplo anterior.
2) Usar un decodificador para decodificar el conjunto de bytes codificados y comparar los objetos de entrada / salida.
El problema que veo con el método 1 es que es muy frágil y requiere muchos valores codificados.
El problema con el método 2 es que probar el codificador depende de que el decodificador funcione correctamente. Si el codificador / decodificador se rompen por igual (en el mismo lugar), entonces las pruebas podrían producir falsos positivos.
Estas pueden muy bien ser las únicas formas de probar este tipo de método. Si ese es el caso, entonces está bien. Estoy haciendo la pregunta para ver si hay mejores estrategias para este tipo de pruebas. No puedo revelar las partes internas del codificador particular en el que estoy trabajando. Le pregunto en general cómo resolvería este tipo de problema, y no creo que las partes internas sean importantes. Suponga que un objeto de entrada dado siempre producirá la misma matriz de bytes de salida.
myObjectva demyObjecta{ 0x01, 0x02, 0xFF }? ¿Se puede descomponer y probar ese algoritmo? La razón por la que pregunto es ahora, parece que tienes una prueba que demuestra que una cosa mágica produce otra cosa mágica. Su única confianza es que la única entrada produce la única salida. Si puede desglosar el algoritmo, puede ganar más confianza en el algoritmo y depender menos de las entradas y salidas mágicas.