Saya menulis unit test untuk sistem kemudi untuk gim video. Sistem memiliki beberapa perilaku (hindari area ini karena alasan A, hindari area ini karena alasan B, masing-masing menambahkan sedikit konteks pada peta wilayah. Fungsi terpisah kemudian mem-parsing peta dan menghasilkan gerakan yang diinginkan.
Saya mengalami kesulitan memutuskan bagaimana menulis unit test untuk perilaku tersebut. Seperti yang disarankan TDD, saya hanya tertarik pada bagaimana perilaku memengaruhi gerakan yang diinginkan. Misalnya, menghindari-karena-alasan-A harus mengakibatkan gerakan menjauh dari posisi buruk yang disarankan. Saya sebenarnya tidak peduli bagaimana atau mengapa perilaku itu menambah konteks pada peta, hanya saja gerakan yang diinginkan jauh dari posisi.
Jadi tes saya untuk setiap perilaku mengatur perilaku, membuatnya menulis ke peta, lalu menjalankan fungsi parsing peta untuk mengetahui gerakan yang diinginkan. Jika gerakan itu memenuhi spesifikasi saya maka saya senang.
Namun sekarang tes saya bergantung pada perilaku yang bekerja dengan benar, dan fungsi penguraian peta bekerja dengan benar. Jika fungsi parsing gagal, maka saya akan mendapatkan ratusan tes gagal daripada pasangan. Banyak panduan penulisan ujian menyarankan ini adalah ide yang buruk.
Namun jika saya menguji langsung terhadap output dari perilaku dengan mengejek peta, maka tentunya saya terlalu dekat dengan implementasi? Jika saya bisa mendapatkan gerakan yang diinginkan yang sama dari peta dengan menggunakan perilaku yang sedikit berbeda, maka tes harus tetap berlalu.
Jadi sekarang saya menderita disonansi kognitif. Apa cara terbaik untuk menyusun tes ini?