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

Bilakah Anda Harus Mengejek Kaedah Peribadi dalam PHPUnit?

Barbara Streisand
Lepaskan: 2024-10-30 04:55:28
asal
934 orang telah melayarinya

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

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>
    Salin selepas log masuk
  2. Tentukan kelakuan yang diharapkan oleh peribadi kaedah:

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

    <code class="php">$originalInstance = new A();
    $this->reflection()->setProtectedProperty(
       $originalInstance,
       'c',
       $mock
    );</code>
    Salin selepas log masuk
  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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan