Bilakah Perlu untuk Mengejek Kaedah Peribadi dengan PHPUnit?

DDD
Lepaskan: 2024-10-31 16:44:30
asal
764 orang telah melayarinya

 When is it Necessary to Mock Private Methods with PHPUnit?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan