Rumah > Artikel > pembangunan bahagian belakang > Bilakah Anda Harus Mengejek Kaedah Peribadi dalam PHPUnit?
Pengenalan
Mengejek kaedah persendirian boleh menjadi teknik yang berguna untuk menguji logik dalam kelas tanpa mendedahkan butiran pelaksanaannya. Walau bagaimanapun, adalah penting untuk mendekati perkara ini dengan berhati-hati untuk mengelakkan pengkapsulan pecah dan menjejaskan integriti kod anda.
Masalah
Pertimbangkan contoh berikut:
<code class="php">class A { public function b() { // some code $this->c(); // some more code } private function c(){ // some code } }</code>
Bagaimanakah anda boleh stub hasil kaedah persendirian c() untuk menguji bahagian "beberapa lagi kod" fungsi awam b() menggunakan PHPUnit?
Penyelesaian
Pilihan 1: Pertimbangkan Pemfaktoran Semula
Secara amnya, ia tidak dianggap sebagai amalan terbaik untuk menguji kaedah persendirian secara langsung. Sebaliknya, fokus pada menguji API awam kelas. Sebarang butiran pelaksanaan dalaman harus dianggap sebagai kotak hitam.
Pilihan 2: Gunakan Olok-olok (Teruskan dengan Berhati-hati)
Walau bagaimanapun, dalam senario tertentu, kaedah persendirian mengejek mungkin perlu. Untuk mencapai ini menggunakan PHPUnit:
Buat objek olok-olok untuk kelas yang sedang diuji:
<code class="php">$mock = $this->getMockBuilder('A') ->disableOriginalConstructor() ->getMock();</code>
Tentukan kelakuan yang diharapkan oleh peribadi kaedah:
<code class="php">$mock->expects($this->once()) ->method('c') ->will($this->returnValue(YOUR_STUBBED_VALUE));</code>
Gantikan tika asal dengan olok-olok dalam ujian anda:
<code class="php">$originalInstance = new A(); $this->reflection()->setProtectedProperty( $originalInstance, 'c', $mock );</code>
Atas ialah kandungan terperinci Bilakah Anda Harus Mengejek Kaedah Peribadi dalam PHPUnit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!