Cara Mengejek Kaedah Peribadi dengan PHPUnit
Ujian unit memainkan peranan penting dalam memastikan keteguhan dan kebolehpercayaan aplikasi perisian. Menggunakan PHPUnit, rangka kerja ujian PHP yang popular, pembangun boleh stub (atau mengejek) kaedah peribadi untuk menguji laluan kod tertentu dan mengesahkan hasil yang dijangkakan.
Pertimbangkan kelas berikut sebagai contoh:
<code class="php">class A { public function b() { // some code $this->c(); // some more code } private function c(){ // some code } }</code>
Matlamatnya adalah untuk mengejek kaedah persendirian c() untuk menguji bahagian "beberapa lagi kod" kaedah awam b().
Mengapa Menguji Kaedah Peribadi Boleh Menyusahkan
Sebelum mendalami kaedah persendirian yang mengejek, adalah penting untuk memahami sebab biasanya tidak disyorkan untuk mengujinya secara langsung. Menurut prinsip pengkapsulan dan penyembunyian maklumat, dalaman kelas harus kekal peribadi dan tidak boleh diakses dari luar. Menguji kaedah persendirian bertentangan dengan prinsip ini dan boleh membawa kepada ujian rapuh yang pecah apabila pelaksanaan berubah.
Pendekatan Alternatif
Dalam kebanyakan kes, adalah lebih baik untuk menguji orang ramai API kelas dan bukannya butiran pelaksanaan peribadinya. Kelas pemfaktoran semula untuk mendedahkan kefungsian tersembunyi melalui kaedah awam atau suntikan kebergantungan boleh meningkatkan kebolehujian.
Apabila Kaedah Peribadi Mengejek Diperlukan
Walau bagaimanapun, terdapat pengecualian kepada peraturan tersebut. Kadangkala, kaedah persendirian mengejek diperlukan apabila menguji senario tertentu atau menggunakan laluan kod yang sebaliknya tidak boleh diakses.
Cara Mengejek Kaedah Peribadi dengan PHPUnit
Jika anda benar-benar mesti mengejek kaedah persendirian, PHPUnit menyediakan mekanisme untuk berbuat demikian:
<code class="php">// instantiate the class normally $testMe = new A(); // mock the private method "c" $testMe->expects($this->once())->method("c")->will($this->returnValue(123123));</code>
Sekarang, apabila kaedah b() digunakan, olok-olok akan mengatasi pelaksanaan sebenar c() dan mengembalikan nilai yang ditentukan (123123 dalam kes ini).
Pertimbangan Tambahan
Walaupun mengejek kaedah persendirian boleh berguna dalam situasi tertentu, adalah penting untuk mendekati ujian sedemikian dengan berhati-hati. Mereka harus digunakan dengan berhati-hati dan hanya apabila perlu. Ingat, fokus utama ujian unit ialah mengesahkan API awam kelas, bukan pelaksanaan dalaman mereka.
Atas ialah kandungan terperinci Bilakah Perlu untuk Mengejek Kaedah Peribadi dengan PHPUnit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!