FakeIt , sebuah framework mocking C++ yang dirancang untuk menyederhanakan unit testing, telah memicu perdebatan di komunitas pengembang mengenai keterbatasan teknis dan kegunaan praktisnya. Meskipun framework ini menjanjikan integrasi yang mudah dengan alat testing populer seperti Google Test dan Boost Test melalui pendekatan single header file, beberapa masalah yang mengkhawatirkan telah muncul dari diskusi komunitas.
Framework Testing yang Didukung
Framework | Nama Konfigurasi |
---|---|
Google Test | gtest |
MSTest | mstest |
Boost Test | boost |
Catch 2 | catch |
Qt Test | qtest |
doctest | doctest |
Standalone | standalone |
Kompatibilitas Optimisasi Menimbulkan Kekhawatiran
Kekhawatiran paling signifikan berpusat pada ketidakmampuan FakeIt untuk bekerja dengan optimisasi compiler standar. Framework ini secara eksplisit mengharuskan pengguna GCC untuk melakukan kompilasi dengan flag -O1 atau -O0, sepenuhnya menghindari level optimisasi -O2 dan -O3 yang umum digunakan. Keterbatasan ini menunjukkan bahwa framework mungkin memanipulasi objek dalam memori dengan cara yang rusak di bawah optimisasi compiler normal.
Rusak dengan optimisasi berarti rusak bagi saya. Jangan bermain-main dengan undefined behavior; entah Anda harus menghindarinya, atau penghindaran compiler Anda harus sangat ketat sehingga masih berfungsi dengan optimisasi.
Pembatasan ini menciptakan masalah praktis bagi tim pengembang yang perlu menjalankan test suite dalam mode release atau men-debug masalah spesifik optimisasi. Keterbatasan ini secara efektif mencegah pengembang dari menguji kode mereka dalam kondisi yang sama seperti saat akan berjalan di produksi.
Keterbatasan Utama
- Dukungan Compiler: Hanya mendukung GCC, Clang, dan MSC++
- Flag Optimasi: GCC O2 dan O3 tidak didukung (harus menggunakan -O1 atau -O0)
- Inheritance: Tidak dapat melakukan mock pada kelas dengan multiple atau virtual inheritance
- Thread Safety: Mock tidak aman untuk thread
- Persyaratan MSC++: Harus mengaktifkan mode debug Edit And Continue
Mempertanyakan Proposisi Nilai
Anggota komunitas juga telah mempertanyakan apakah FakeIt memberikan nilai yang cukup dibandingkan alternatif yang lebih sederhana. Beberapa pengembang berargumen bahwa menulis kode implementasi aktual akan memerlukan usaha yang lebih sedikit daripada menyiapkan mock menggunakan framework ini. Kritik ini menyoroti perdebatan yang lebih luas tentang kapan framework mocking menjadi lebih menghambat daripada membantu.
Diskusi ini mengungkapkan preferensi di antara beberapa pengembang untuk fake yang ditulis tangan yang memodelkan perilaku nyata tanpa efek samping yang tidak diinginkan. Solusi kustom ini, meskipun memerlukan usaha awal yang lebih besar, sering memberikan kontrol dan pemahaman yang lebih baik terhadap lingkungan testing.
Konflik Nama dan Kekhawatiran Integrasi
Menambah tantangan framework ini adalah konflik penamaan dengan framework testing Microsoft yang sudah ada, yang dapat menciptakan kebingungan bagi pengembang yang bekerja di lingkungan campuran. Tumpang tindih ini mungkin mempersulit adopsi di organisasi yang sudah menggunakan alat testing Microsoft .
Meskipun ada kritik-kritik ini, FakeIt memang menawarkan beberapa fitur yang menarik, termasuk dukungan untuk compiler utama ( GCC , Clang , dan Visual Studio ), integrasi dengan berbagai framework testing, dan API yang relatif sederhana berdasarkan fitur C++11 . Framework ini juga mendukung dynamic casting dan tidak membatasi jumlah argumen method.
Diskusi komunitas seputar FakeIt mencerminkan ketegangan yang lebih luas dalam praktik testing C++ , di mana pengembang harus menyeimbangkan kenyamanan dengan keandalan dan performa. Meskipun framework mocking dapat mengurangi boilerplate code, mereka juga memperkenalkan dependensi dan titik kegagalan potensial yang mungkin tidak membenarkan kompleksitas mereka dalam semua situasi.
Referensi: Fakelt