Saya sedang menulis game dan mesin grafis yang menyertainya di atas OpenGL di C ++. Saya juga penggemar proses pengkodean yang baik dan pengujian otomatis. Pengujian kode grafis + kelihatannya tidak dapat ditawar-tawar lagi, karena output seringkali hanya berupa visual, atau sangat berorientasi visual.
Misalnya, bayangkan menganalisis aliran gambar mentah yang dirender ke layar byte-by-byte - Anda perlu data uji untuk dibandingkan, yang sulit dibuat / diperoleh, dan seringkali gambar yang diberikan tidak identik pada suatu tingkat byte saat dijalankan pada waktu yang berbeda - perubahan kecil dalam algoritma akan merusak pendekatan ini sepenuhnya.
Saya sedang berpikir untuk membuat unit-test suite visual, di mana saya pada dasarnya dapat membuat adegan tes yang berbeda, menunjukkan hal-hal seperti pemetaan bayangan, animasi, dll. Dll. Sebagai bagian dari CI, adegan ini kemudian akan dirender menjadi video file (atau mungkin membiarkannya sebagai executable) dengan berbagai metrik. Ini masih membutuhkan pemeriksaan manual dari file video, tetapi setidaknya itu akan menjadi agak otomatis dan standar.
Bagaimana menurut anda? Saya berharap ada cara yang lebih baik?
Jawaban:
Pustaka pemrosesan gambar terbuka melakukannya dengan menyimpan gambar dan membandingkannya dengan gambar referensi - ia memiliki banyak fungsi uji c ++ dan makro untuk menangani perkiraan pencocokan gambar dll.
sumber
Kerangka uji Anda dapat merender gambar uji ke dalam buffer, mengambil gambar yang diberikan, dan membandingkannya dengan gambar referensi "emas" yang sebelumnya telah dibuat untuk tujuan itu.
Ini tidak akan bekerja dengan baik untuk kasus-kasus di mana hasil tes Anda tidak diharapkan tetap sama persis . Namun, Anda dapat menghitung perbedaan kuadrat dari gambar tes dan referensi, dan membandingkannya dengan ambang batas.
Anda mungkin juga ingin menyediakan untuk logging dan memeriksa data kinerja, karena regresi utama dalam kinerja adalah mode kegagalan lain yang mungkin.
sumber
Bahkan jika Anda tidak dapat membandingkan gambar output, setidaknya Anda akan dapat menguji apakah render Anda lengkap dengan benar (tidak ada crash, menunggu lama, dll, dll). Menemukan cara untuk memeriksa gambar lebih baik, tentu saja, tetapi bahkan tanpa itu Anda akan mendapatkan sesuatu dari tes.
sumber