FakeIt , sebuah rangka kerja mocking C++ yang direka untuk memudahkan ujian unit, telah mencetuskan perdebatan dalam komuniti pembangun mengenai had teknikal dan kegunaan praktikalnya. Walaupun rangka kerja ini menjanjikan integrasi mudah dengan alat ujian popular seperti Google Test dan Boost Test melalui pendekatan fail header tunggal, beberapa isu yang membimbangkan telah muncul daripada perbincangan komuniti.
Rangka Kerja Ujian yang Disokong
Rangka Kerja | Nama Konfigurasi |
---|---|
Google Test | gtest |
MSTest | mstest |
Boost Test | boost |
Catch 2 | catch |
Qt Test | qtest |
doctest | doctest |
Standalone | standalone |
Keserasian Pengoptimuman Menimbulkan Tanda Bahaya
Kebimbangan paling ketara berpusat pada ketidakupayaan FakeIt untuk berfungsi dengan pengoptimuman kompiler standard. Rangka kerja ini secara eksplisit memerlukan pengguna GCC untuk menyusun dengan flag -O1 atau -O0, mengelakkan sepenuhnya tahap pengoptimuman -O2 dan -O3 yang biasa digunakan. Had ini menunjukkan rangka kerja mungkin memanipulasi objek dalam memori dengan cara yang rosak di bawah pengoptimuman kompiler biasa.
Rosak dengan pengoptimuman bermakna rosak bagi saya. Jangan main-main dengan tingkah laku yang tidak ditentukan; sama ada anda perlu mengelakkannya, atau pengelakan anda terhadap kompiler mestilah begitu ketat sehingga ia masih berfungsi dengan pengoptimuman.
Sekatan ini mewujudkan masalah praktikal untuk pasukan pembangunan yang perlu menjalankan suite ujian dalam mod keluaran atau nyahpepijat isu khusus pengoptimuman. Had ini secara berkesan menghalang pembangun daripada menguji kod mereka di bawah keadaan yang sama seperti ia akan berjalan dalam pengeluaran.
Batasan Utama
- Sokongan Pengkompil: Hanya GCC , Clang , dan MSC++ yang disokong
- Flag Pengoptimuman: GCC O2 dan O3 tidak disokong (mesti gunakan -O1 atau -O0)
- Pewarisan: Tidak boleh mock kelas dengan pewarisan berganda atau maya
- Keselamatan Thread: Mock tidak selamat untuk thread
- Keperluan MSC++: Mesti mempunyai mod debug Edit And Continue yang diaktifkan
Mempersoalkan Proposisi Nilai
Ahli komuniti juga telah mempersoalkan sama ada FakeIt memberikan nilai yang mencukupi berbanding alternatif yang lebih mudah. Sesetengah pembangun berpendapat bahawa menulis kod pelaksanaan sebenar akan memerlukan usaha yang kurang daripada menyediakan mock menggunakan rangka kerja. Kritikan ini menyerlahkan perdebatan yang lebih luas tentang bila rangka kerja mocking menjadi lebih menghalang daripada membantu.
Perbincangan mendedahkan keutamaan di kalangan sesetengah pembangun untuk fake yang ditulis tangan yang memodelkan tingkah laku sebenar tanpa kesan sampingan yang tidak diingini. Penyelesaian tersuai ini, walaupun memerlukan lebih banyak usaha awal, sering memberikan kawalan dan pemahaman yang lebih baik tentang persekitaran ujian.
Perlanggaran Nama dan Kebimbangan Integrasi
Menambah kepada cabaran rangka kerja adalah konflik penamaan dengan rangka kerja ujian sedia ada Microsoft , yang boleh mewujudkan kekeliruan untuk pembangun yang bekerja dalam persekitaran campuran. Pertindihan ini mungkin merumitkan penggunaan dalam organisasi yang sudah menggunakan alat ujian Microsoft .
Walaupun kritikan ini, FakeIt menawarkan beberapa ciri yang menarik, termasuk sokongan untuk kompiler utama ( GCC , Clang , dan Visual Studio ), integrasi dengan pelbagai rangka kerja ujian, dan API yang agak mudah berdasarkan ciri C++11 . Rangka kerja ini juga menyokong dynamic casting dan tidak meletakkan had pada bilangan argumen kaedah.
Perbincangan komuniti mengenai FakeIt mencerminkan ketegangan yang lebih luas dalam amalan ujian C++ , di mana pembangun mesti mengimbangi kemudahan dengan kebolehpercayaan dan prestasi. Walaupun rangka kerja mocking boleh mengurangkan kod boilerplate, ia juga memperkenalkan kebergantungan dan titik kegagalan berpotensi yang mungkin tidak membenarkan kerumitan mereka dalam semua situasi.
Rujukan: Fakelt