Rumah >pembangunan bahagian belakang >tutorial php >Bilakah Anda Harus Mengejek Kaedah Peribadi dalam PHPUnit?

Bilakah Anda Harus Mengejek Kaedah Peribadi dalam PHPUnit?

Barbara Streisand
Barbara Streisandasal
2024-10-30 04:55:28914semak imbas

 When Should You Mock Private Methods in PHPUnit?

Mengejek Kaedah Peribadi dengan 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:

  1. Buat objek olok-olok untuk kelas yang sedang diuji:

    <code class="php">$mock = $this->getMockBuilder('A')
                ->disableOriginalConstructor()
                ->getMock();</code>
  2. Tentukan kelakuan yang diharapkan oleh peribadi kaedah:

    <code class="php">$mock->expects($this->once())
        ->method('c')
        ->will($this->returnValue(YOUR_STUBBED_VALUE));</code>
  3. Gantikan tika asal dengan olok-olok dalam ujian anda:

    <code class="php">$originalInstance = new A();
    $this->reflection()->setProtectedProperty(
       $originalInstance,
       'c',
       $mock
    );</code>
  4. Jalankan ujian anda seperti biasa.

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!

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