私はこのようなものを持っています:
public byte[] EncodeMyObject(MyObject obj)
私はこのようにユニットテストをしてきました:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
編集:私が提案した2つの方法は次のとおりです。
1)上記の例のように、ハードコードされた期待値を使用します。
2)デコーダーを使用してエンコードされたバイト配列をデコードし、入力/出力オブジェクトを比較します。
方法1で見られる問題は、非常に壊れやすく、多くのハードコードされた値を必要とすることです。
方法2の問題は、エンコーダーのテストがデコーダーの正常な動作に依存することです。エンコーダー/デコーダーが同じ場所で同じように破損している場合、テストで誤検知が発生する可能性があります。
これらが、このタイプのメソッドをテストする唯一の方法である場合があります。その場合は問題ありません。この種のテストにもっと良い戦略があるかどうかを確認するために質問しています。作業中の特定のエンコーダーの内部を明らかにできません。この種の問題をどのように解決するか一般的に尋ねていますが、内部は重要ではないと思います。特定の入力オブジェクトが常に同じ出力バイト配列を生成すると想定します。
myObject
からmyObject
にどうやって行くの{ 0x01, 0x02, 0xFF }
ですか?そのアルゴリズムを分解してテストできますか?私が尋ねる理由は、現在、ある魔法の物が別の魔法の物を生み出すことを証明するテストがあるようです。唯一の自信は、1つの入力が1つの出力を生成することです。アルゴリズムを分解できれば、アルゴリズムの信頼性が高まり、魔法の入力や出力への依存度が低くなります。