Saya punya sesuatu seperti ini:
public byte[] EncodeMyObject(MyObject obj)
Saya telah menguji unit seperti ini:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDIT: Dua cara yang saya lihat diusulkan adalah:
1) Menggunakan nilai yang diharapkan hardcoded, seperti contoh di atas.
2) Menggunakan dekoder untuk mendekode array byte yang disandikan dan membandingkan objek input / output.
Masalah yang saya lihat dengan metode 1 adalah sangat rapuh dan membutuhkan banyak nilai kode keras.
Masalah dengan metode 2 adalah bahwa pengujian encoder tergantung pada decoder yang bekerja dengan benar. Jika encoder / decoder rusak secara merata (di tempat yang sama), maka pengujian dapat menghasilkan false positive.
Ini mungkin satu-satunya cara untuk menguji metode jenis ini. Jika itu masalahnya maka baiklah. Saya mengajukan pertanyaan untuk melihat apakah ada strategi yang lebih baik untuk jenis pengujian ini. Saya tidak dapat mengungkapkan internal encoder tertentu yang sedang saya kerjakan. Saya bertanya secara umum bagaimana Anda akan menyelesaikan masalah jenis ini, dan saya merasa internal tidak penting. Asumsikan bahwa objek input yang diberikan akan selalu menghasilkan array byte keluaran yang sama.
myObject
beralih darimyObject
ke{ 0x01, 0x02, 0xFF }
? Bisakah algoritma itu dipecah dan diuji? Alasan saya bertanya adalah saat ini, sepertinya Anda memiliki tes yang membuktikan bahwa satu benda ajaib menghasilkan benda ajaib lain. Satu-satunya kepercayaan Anda adalah bahwa satu input menghasilkan satu output. Jika Anda dapat memecah algoritma, Anda bisa mendapatkan kepercayaan lebih lanjut dalam algoritma, dan kurang bergantung pada input dan output magis.