Rumah pembangunan bahagian belakang tutorial php Cara menggunakan PHPUnit untuk ujian Mock dalam pembangunan PHP

Cara menggunakan PHPUnit untuk ujian Mock dalam pembangunan PHP

Jun 27, 2023 am 10:25 AM
php phpunit ujian olok-olok

Dalam pembangunan PHP, ujian adalah pautan yang sangat penting Pengujian boleh mengurangkan berlakunya ralat dan meningkatkan kualiti kod. Ujian olok-olok ialah satu bentuk ujian yang boleh mensimulasikan objek atau data palsu untuk menguji fungsi atau senario tertentu kod kami.

PHPUnit ialah rangka kerja ujian yang sangat popular dalam PHP, yang menyokong ujian Mock. Dalam artikel ini, kami akan meneroka cara menggunakan PHPUnit untuk ujian olok-olok.

1. Apakah itu ujian Mock

Sebelum kita mula, mari kita fahami konsep ujian Mock. Ujian olok-olok ialah sejenis ujian simulasi yang membolehkan kami menguji tanpa kebergantungan sebenar.

Sebagai contoh, kami sedang membangunkan tapak web e-dagang yang merangkumi fungsi troli beli-belah. Semasa menjalankan ujian troli beli-belah, kita perlu menguji fungsi seperti menambah, memadam dan pengiraan harga untuk item. Walau bagaimanapun, ciri ini mungkin bergantung pada modul lain atau API luaran. Ini menjadikan ujian kami sangat sukar Jika kami perlu menjalankan ujian sebenar, kos ujian akan menjadi sangat tinggi.

Ujian olok-olok membolehkan kami menguji tanpa kebergantungan sebenar. Dalam ujian troli beli-belah, kami boleh menggunakan rangka kerja ujian Mock untuk mencipta produk olok-olok dan menggunakannya dalam ujian untuk menguji penambahan, pemadaman, pengiraan harga dan fungsi lain produk. Dengan cara ini kita boleh menguji kefungsian troli beli-belah dengan mudah tanpa memerlukan item sebenar atau API luaran.

2. Gunakan PHPUnit untuk ujian Mock

Seterusnya, kami akan menggunakan rangka kerja ujian PHPUnit untuk ujian Mock. Dalam PHPUnit, kita boleh menggunakan kelas PHPUnitFrameworkMockObjectMockBuilder untuk mencipta objek Mock. MockBuilder ialah kelas dalam PHPUnit yang boleh membantu kami mencipta objek Mock.

1. Cipta objek Mock

Dalam PHPUnit, kita boleh menggunakan MockBuilder untuk mencipta objek Mock. Kita boleh mencipta objek olok-olok melalui MockBuilder dan menentukan kaedah dan sifatnya. Kami kemudiannya boleh menggunakan objek Mock untuk menguji kod kami.

Sebagai contoh, kita perlu mensimulasikan objek produk dalam ujian troli beli-belah. Kita boleh menggunakan MockBuilder untuk mencipta objek komoditi olok-olok.

Contoh kod:

use PHPUnitFrameworkTestCase;

class ShoppingCartTest extends TestCase
{
    public function testAddProduct()
    {
        // 创建 MockBuilder 对象
        $product = $this->getMockBuilder(Product::class)
            ->getMock();

        // 测试真实代码,使用假对象
        $cart = new ShoppingCart();
        $cart->addProduct($product);

        // 断言购物车中包含模拟的商品
        $this->assertTrue($cart->hasProduct($product));
    }
}
Salin selepas log masuk

Dalam kod contoh ini, kami mencipta objek MockBuilder untuk membina objek produk olok-olok (Produk). Kemudian, kami menggunakan objek ini untuk melaksanakan fungsi tambah produk troli beli-belah. Akhir sekali, kami menggunakan pernyataan assertTrue() untuk mengesahkan sama ada troli beli-belah mengandungi objek produk yang kami bina.

2. Definisi kaedah dan tetapan nilai pulangan

Kami boleh mensimulasikan objek atau data sebenar dengan menetapkan kaedah dan sifat objek Mock.

Sebagai contoh, kami mempunyai kelas Orang, yang mempunyai kaedah sayHello(), yang boleh mengembalikan rentetan "Hello".

Contoh Kod:

class Person {
    public function sayHello() {
        return "Hello";
    }
}
Salin selepas log masuk
Salin selepas log masuk

Kini, kami mempunyai kelas Ucapan yang kaedahnya bergantung pada kaedah sayHello() kelas Person. Kita boleh menggunakan MockBuilder untuk mencipta objek Olok-olok dan memanggil kaedah Ucapan dalam ujian.

Contoh Kod:

use PHPUnitFrameworkTestCase;

class GreetingTest extends TestCase
{
    public function testSayHello()
    {
        // 创建 MockBuilder 对象
        $person = $this->getMockBuilder(Person::class)
            ->getMock();

        // 定义方法返回值
        $person->expects($this->any())
            ->method('sayHello')
            ->willReturn('Hello, Mock');

        // 测试真实代码,使用假对象
        $greeting = new Greeting($person);
        $this->assertEquals('Hello, Mock', $greeting->sayHello());
    }
}
Salin selepas log masuk

Dalam kod contoh ini, kami mencipta objek MockBuilder untuk membina objek Orang olok-olok. Kemudian, kami mentakrifkan nilai pulangan kaedah sayHello() bagi objek Person sebagai "Hello, Mock". Akhir sekali, kami menggunakan objek untuk melaksanakan kaedah Greeting's sayHello() dan menggunakan assertEquals() untuk menegaskan sama ada kaedah itu mengembalikan "Hello, Mock".

3. Pengesahan panggilan kaedah

Dalam PHPUnit, kami boleh menggunakan objek Mock untuk mengesahkan panggilan kaedah. Kami boleh menggunakan API jangkaan PHPUnit untuk mengesahkan bahawa kaedah itu dipanggil.

Sebagai contoh, kami mempunyai kelas Orang, yang mempunyai kaedah sayHello(), yang mengembalikan rentetan "Hello".

Contoh Kod:

class Person {
    public function sayHello() {
        return "Hello";
    }
}
Salin selepas log masuk
Salin selepas log masuk

Kini, kami mempunyai kelas Greeting yang pembinanya memerlukan objek Person dan mempunyai kaedah sayHello() yang bergantung pada kaedah sayHello() kelas Person. Kita boleh menggunakan API jangkaan untuk menguji sama ada kaedah sayHello() kelas ucapan berjaya memanggil kaedah sayHello() kelas Person.

Contoh Kod:

use PHPUnitFrameworkTestCase;

class GreetingTest extends TestCase
{
    public function testSayHello()
    {
        // 创建 MockBuilder 对象
        $person = $this->getMockBuilder(Person::class)
            ->getMock();

        // 验证方法是否被调用
        $person->expects($this->once())
            ->method('sayHello');

        // 测试真实代码,使用假对象
        $greeting = new Greeting($person);
        $greeting->sayHello();
    }
}
Salin selepas log masuk

Dalam kod contoh ini, kami mencipta objek MockBuilder untuk membina objek Orang olok-olok. Kami kemudian menggunakan API jangkaan untuk mengesahkan sama ada kaedah sayHello() kelas Person berjaya dipanggil.

4. Ujian olok-olok pembina

Dalam PHPUnit, kita boleh menggunakan kaedah getMock() untuk mensimulasikan proses instantiasi kelas dan menetapkan parameter pembina dan pembina masing-masing.

Sebagai contoh, kami mempunyai kelas Kalkulator yang mempunyai pembina dan kaedah tambah. Dalam pembina, kita perlu lulus nombor $a dan $b. Kaedah tambah menambah a dan b dan mengembalikan hasilnya.

Contoh Kod:

class Calculator
{
    public function __construct($a, $b)
    {
        $this->a = $a;
        $this->b = $b;
    }

    public function add()
    {
        return $this->a + $this->b;
    }
}
Salin selepas log masuk

Kini, kami mempunyai kelas CalculatorTest yang perlu menguji kaedah tambah kelas Kalkulator. Kita boleh menggunakan kaedah getMock() untuk mensimulasikan proses penciptaan objek Kalkulator dan menetapkan parameter pembina.

Contoh kod:

use PHPUnitFrameworkTestCase;

class CalculatorTest extends TestCase
{
    public function testAdd()
    {
        // 创建 Mock 对象
        $calculator = $this->getMockBuilder(Calculator::class)
            ->disableOriginalConstructor()
            ->getMock();

        // 手动设置构造函数参数
        $calculator->expects($this->any())
            ->method('__construct')
            ->with(2, 3)
            ->willReturn(5);

        // 测试真实代码,使用假对象
        $this->assertEquals(5, $calculator->add());
    }
}
Salin selepas log masuk

在这个示例代码中,我们创建了一个MockBuilder对象来构建一个模拟Calculator对象。然后,我们使用getMock()方法来模拟Calculator对象的创建过程,并使用disableOriginalConstructor()方法来禁用原始构造函数。接着,我们使用expects()方法来设置构造函数的参数,并在willReturn()方法中返回我们的期望值。

最后,我们使用assertEquals()断言来验证add()方法是否返回我们预期的值。

三、总结

Mock测试可以轻松地帮助我们在不需要真实依赖的情况下进行测试。在PHPUnit中,PHPUnitFrameworkMockObjectMockBuilder类可以帮助我们创建Mock对象并进行Mock测试。

在使用MockBuilder创建Mock对象时,我们可以设置需要模拟的属性和方法,包括方法的返回值和调用次数,甚至模拟构造函数。Mock测试可以使我们的测试更加简单和高效,并且隔离了我们的代码与外部依赖的测试。

Atas ialah kandungan terperinci Cara menggunakan PHPUnit untuk ujian Mock dalam pembangunan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP ialah rangka kerja MVC sumber terbuka. Ia menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP mempunyai beberapa perpustakaan untuk mengurangkan beban tugas yang paling biasa.

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

See all articles