Bagaimana saya menggunakan objek mengejek dalam ujian unit PHP?
Objek mock dalam ujian unit PHP adalah objek simulasi yang berdiri untuk kebergantungan sebenar dalam kod anda. Mereka membolehkan anda mengasingkan unit di bawah ujian dan mengawal interaksi dengan sistem luaran atau komponen kompleks. Ini penting untuk menulis ujian unit yang boleh dipercayai dan cepat. Anda biasanya menggunakan rangka kerja yang mengejek seperti keupayaan mengejek terbina dalam PHPUNIT atau perpustakaan yang berdedikasi seperti nubuatan. Pengguna kelas {Pangkalan Data Private $; Fungsi awam __Construct (pangkalan data $ pangkalan data) {$ this- & gt; pangkalan data = $ pangkalan data; } fungsi awam getUserbyId (int $ id): array {return $ this- & gt; pangkalan data- & gt; fetchuser ($ id); }} pangkalan data kelas {fetchuser fungsi awam (int $ id): array {// simulate mengambil data pengguna dari pangkalan data // ... interaksi pangkalan data kompleks ... return ['id' = & gt; $ id, 'nama' = & gt; 'John Doe']; }} kelas userTest extends testCase {public function testgetuserById () {// create a mock objek untuk dependency pangkalan data $ mockDatabase = $ this- & gt; createmock (pangkalan data :: class); // Tentukan tingkah laku yang diharapkan dari objek mock $ mockDatabase- & gt; mengharapkan ($ this- & gt; sekali ()) -& gt; kaedah ('fetchuser') -& gt; dengan (1) -& gt; willreturn (['id' = & gt; // Buat objek pengguna menggunakan pangkalan data mock $ user = pengguna baru ($ mockDatabase); // menegaskan hasil $ this- & gt; assertequals (['id' = & gt; 1, 'name' = & gt; 'user user'], $ user- & gt; getUserbyId (1)); }}
Dalam contoh ini, $ mockDatabase
simulasi pangkalan data . $ mockDatabase- & gt; menjangkakan ($ this- & gt; sekali ())-& gt; kaedah ('fetchuser') ...
menetapkan jangkaan bahawa kaedah fetchuser
akan dipanggil sekali dengan argumen 1 Ini mengelakkan keperluan untuk menyambung ke pangkalan data sebenar semasa ujian, menjadikan ujian lebih cepat dan lebih dipercayai.
Apakah manfaat menggunakan objek mock dalam ujian unit PHP saya? Ini menghalang kegagalan ujian yang disebabkan oleh faktor luaran seperti isu pangkalan data, masalah rangkaian, atau tingkah laku komponen lain. Anda menguji unit dalam persekitaran terkawal.
Kelajuan: Mengejar ujian dengan ketara. Mereka menghapuskan overhead berinteraksi dengan sistem luaran yang sebenar, menjadikan suite ujian melaksanakan lebih cepat. Anda boleh mensimulasikan tingkah laku mereka dan menguji bagaimana kod anda berinteraksi dengan mereka. Anda boleh mensimulasikan tindak balas yang berbeza dari kebergantungan, termasuk keadaan ralat, tanpa perlu menubuhkan persekitaran ujian yang kompleks. Perubahan dalam satu bahagian sistem anda kurang berkemungkinan menyebabkan kegagalan cascading dalam ujian anda. mengejek. Ini menjadikan kod anda lebih dapat diuji dan mengurangkan gandingan yang ketat.
Rangka kerja mengejek: memanfaatkan kerangka pengokrang yang kuat seperti phpunit atau nubuatan. Rangka kerja ini menyediakan ciri -ciri untuk mewujudkan, mengkonfigurasi, dan mengesahkan tingkah laku objek mengejek, termasuk kaedah stubbing untuk mengembalikan nilai -nilai tertentu, menetapkan jangkaan pada panggilan kaedah, dan mengesahkan bahawa kaedah dipanggil dengan argumen yang betul. Ini membolehkan anda hanya mengejek kaedah khusus kelas, meninggalkan yang lain berfungsi dengan normal. Ini berguna apabila anda perlu menguji interaksi dengan hanya beberapa bahagian kebergantungan yang besar. Pilih jenis yang sesuai berdasarkan keperluan ujian anda. Stubs hanya mengembalikan nilai-nilai yang telah ditetapkan, sementara mengejek mengesahkan interaksi. Fokus pada mengejek hanya bahagian -bahagian yang penting untuk mengasingkan unit yang diuji. Mocking over-mocking boleh menyebabkan ujian rapuh dan kurang bermaklumat. Berjuang untuk gandingan longgar menggunakan suntikan ketergantungan.
Mengabaikan tingkah laku dunia nyata: Walaupun mengejek berguna, mereka tidak sepatutnya menggantikan ujian dengan kebergantungan sebenar. Adalah penting untuk melakukan ujian integrasi untuk mengesahkan interaksi antara komponen yang berbeza dalam persekitaran yang realistik. Refactor Kod anda untuk memudahkan proses ujian. Harapan yang tidak jelas: Pastikan jangkaan anda untuk tingkah laku objek mengejek adalah jelas dan tepat. Harapan yang samar -samar boleh menyebabkan ujian yang tidak boleh dipercayai. Gunakan pernyataan khusus untuk mengesahkan interaksi. Atas ialah kandungan terperinci Bagaimana saya menggunakan objek mock dalam ujian unit php?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn