Kombinasi alat pengujian manakah yang Anda rasa paling baik? Dengan kerangka / pustaka pilihan Anda, Anda dapat mempertimbangkan:
- kesesuaian untuk TDD
- kemudahan penggunaan / produktivitas
- berurusan dengan benda tiruan
- setup dengan integrasi berkelanjutan
- pelaporan kesalahan
Catatan: Meskipun ini berpotensi pertanyaan umum seperti yang ada di SO, saya berpendapat bahwa pengembangan game biasanya terikat pada alur kerja tertentu yang memengaruhi pilihan untuk pengujian. Untuk perspektif level yang lebih tinggi, lihat pertanyaan Pengujian game secara otomatis .
Jawaban:
Saya menemukan UnitTest ++ sangat mudah untuk dikerjakan. Saya masih harus mencoba amop bersama dengannya, yang disebut-sebut sebagai pendamping yang baik untuk UnitTest ++ untuk fungsionalitas objek tiruan. Kalau tidak, Google Mock adalah pilihan populer. Juga, Anda mungkin ingin membaca UnitTest ++ dan Objek Mock .
UnitTest ++ dapat diatur dengan pendekatan Integrasi Berkelanjutan Anda, misalnya dengan Hudson
Anda mungkin ingin membaca posting yang menginspirasi ini jika Anda tidak yakin pengujian unit dan permainan berjalan bersama dengan baik.
sumber
Pilihan lain untuk UnitTest ++ . Sangat mudah diintegrasikan, dikompilasi untuk platform tertanam target kami dengan sangat mudah, langsung dan mudah digunakan. Kami juga telah mengintegrasikannya dengan Hudson. Kami melihat GoogleTest tetapi menolaknya (saya pikir ada masalah saat menyusun platform target kami) tetapi ia memiliki rangkaian fitur yang sama dan mungkin cocok untuk Anda.
Selain itu Anda mungkin ingin melihat ke dalam semacam kerangka pengujian asap. Dalam pengalaman saya, sulit untuk mendapatkan cakupan tes yang cukup untuk permainan dengan tes unit saja. Terutama jika Anda memperkenalkan pengujian unit ke basis kode yang ada, dan bahkan lebih untuk tim besar. Pengujian asap akan menguji hal-hal tingkat tinggi seperti "pastikan semua level memuat". Teori saya adalah jika saya memiliki kedua jenis pengujian maka pada titik tertentu mereka mungkin bertemu di tengah dan memberikan converage yang layak. :)
sumber
Kembali ketika saya bekerja di C ++ (disclaimer: ini sekitar 2005), saya menggunakan versi TUT yang sedikit dimodifikasi (Kerangka Uji Unit Templat) . Saya menyukainya karena sangat ringan, yang membuatnya mudah untuk dimodifikasi, dan berarti ada sangat sedikit "lem" yang diperlukan ketika menulis tes.
Ini adalah salah satu modifikasi sederhana yang saya buat, yang membuatnya lebih mudah / bersih untuk menulis tes:
Perubahan lain yang saya buat adalah untuk format outputnya, sehingga kegagalan tes akan muncul dengan benar dalam daftar kesalahan Visual Studios (ketika dijalankan sebagai bagian dari build), dapat diklik untuk pergi ke file dan garis tes gagal.
(Kemampuan untuk melakukan hal semacam ini berarti bahwa hal itu dapat dibuat agar sesuai dengan proses TDD / CI Anda, daripada memaksa Anda untuk masuk ke dalamnya.)
Berikut ini adalah contoh uji (dari tumpukan perintah dari editor saya):
(Dalam kode di atas,
cs
danod
merupakan perlengkapan per-modul, danTestCommand
merupakan objek tiruan.)sumber
Ketika datang ke C ++, saya telah mencoba dan menggunakan kerangka kerja googletest, http://code.google.com/p/googletest/ . Mudah diatur, mudah digunakan, dan bekerja dengan sangat baik.
sumber
Saya bukan pengembang game profesional, tetapi saya adalah pengembang embedded profesional. Mungkin tidak persis suka game tapi dekat. Di tempat kerja saya, kami telah menggunakan beberapa.
Saya sangat suka tes google . Ini memiliki semua fitur terbaik dari kerangka kerja unit test baru-baru ini, sekaligus menjaganya tetap dalam antarmuka minimal stream stream.
Berikutnya dalam daftar saya adalah Tes Peningkatan . Api tes Google sedikit lebih modern daripada Boost.Test, tetapi Boost Test telah melakukan pekerjaan luar biasa untuk menambahkan fitur baru dan membuang paradigma CppUnit yang kasar.
Saya juga menggunakan CxxTest . Ini dilakukan dengan cukup baik tetapi Anda dapat mengatakan bahwa itu tidak semodern Boost.Test atau Google Test. Secara khusus, dukungannya untuk suite dan perlengkapan uji agak canggung.
Saya suka menggunakan fitur-fitur canggih, tetapi jika Anda seorang minimalis Anda tidak akan pernah melihat perbedaan antara ketiganya. Sebagian besar kolega saya akan senang dengan kerangka kerja unit test yang mendukung tes registrasi otomatis (secara deklaratif) dan memiliki semacam semacam CHECK_EQUALS (a, b) makro.
sumber
Pustaka pengujian favorit saya adalah QuickCheck http://en.wikipedia.org/wiki/QuickCheck . Ada versi C ++ eksperimental, tetapi terlihat terlalu berat, tetapi bahkan tanpa perpustakaan khusus prinsip-prinsipnya mudah digunakan.
Semua kelas saya memiliki metode genArbitrary yang dapat menghasilkan contoh acak. Saya menggunakan ini untuk pengujian asap proses yang dapat dibalik, seperti memuat dan membongkar. Saya dapat menghasilkan ribuan adegan acak dan memeriksa bahwa berbagai properti tahan (seperti adegan yang saya serialkan sama dengan adegan yang saya deserialize).
Itu tidak menggantikan tes unit tradisional (itu memang mengurangi kebutuhan untuk banyak tes unit potensial), tetapi ini merupakan cara yang bagus untuk menemukan bug, dan itu membantu stres menguji strategi alokasi memori saya (bersama dengan Valgrind). Sangat bagus untuk mengawasi lebih dari satu juta alokasi keluar Valgrind murni :).
Saya biasa menggunakan CxxTest sebagai test harness, yang saya sukai. Sekarang semua tes saya adalah ongkos terpisah. Saya hanya memiliki folder bernama Test, dan pernah file yang dimulai dengan Test_ menjadi tes. Sejauh ini sangat ringan untuk melakukan tes.
sumber
Dengan Java, ada begitu banyak pustaka yang bagus ... Tidak seperti C ++.
Untuk pengguna C ++, ada alat rantai dari Kitware yang sangat menarik:
Kitware menulis kode C ++ untuk Ilmu Komputer.
Untuk proyek pribadi, saya menggunakan perpustakaan uji unit Boost (pada platform Desktop). Untuk Integrasi Berkelanjutan, saya menggunakan Hudson:
sumber
Saya akan kedua kerangka TUT (Template Unit Test) ; itu super ringan dan sangat fleksibel, belum lagi sangat mudah untuk diatur dan digunakan di luar kotak (termasuk satu header, sedikit kode utama / pengaturan, dan 24 baris kode uji nanti Anda memiliki unit test). Saya telah mengkombinasikannya dengan binfmtc (menjalankan program C ++ sebagai skrip) untuk prototyping cepat / TDD / templat pembelajaran untuk kesuksesan besar, termasuk pengembangan perangkat lunak tertanam. Karena mampu menghasilkan ke XML, itu juga cocok dengan Jenkins (CI) dan Sonar pada proyek-proyek saya yang berurutan.
sumber