cari
Rumahpembangunan bahagian belakangtutorial phpCara menggunakan PHPUnit untuk ujian Mock dalam pembangunan PHP

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));
    }
}

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";
    }
}

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());
    }
}

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";
    }
}

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();
    }
}

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;
    }
}

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());
    }
}

在这个示例代码中,我们创建了一个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
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
Tujuan PHP: Membina Laman Web DinamikTujuan PHP: Membina Laman Web DinamikApr 15, 2025 am 12:18 AM

PHP digunakan untuk membina laman web dinamik, dan fungsi terasnya termasuk: 1. Menjana kandungan dinamik dan menghasilkan laman web secara real time dengan menyambung dengan pangkalan data; 2. Proses Interaksi Pengguna dan Penyerahan Bentuk, Sahkan Input dan Menanggapi Operasi; 3. Menguruskan sesi dan pengesahan pengguna untuk memberikan pengalaman yang diperibadikan; 4. Mengoptimumkan prestasi dan ikuti amalan terbaik untuk meningkatkan kecekapan dan keselamatan laman web.

PHP: Pengendalian pangkalan data dan logik sisi pelayanPHP: Pengendalian pangkalan data dan logik sisi pelayanApr 15, 2025 am 12:15 AM

PHP menggunakan sambungan MySQLI dan PDO untuk berinteraksi dalam operasi pangkalan data dan pemprosesan logik sisi pelayan, dan memproses logik sisi pelayan melalui fungsi seperti pengurusan sesi. 1) Gunakan MySQLI atau PDO untuk menyambung ke pangkalan data dan laksanakan pertanyaan SQL. 2) Mengendalikan permintaan HTTP dan status pengguna melalui pengurusan sesi dan fungsi lain. 3) Gunakan urus niaga untuk memastikan atomik operasi pangkalan data. 4) Mencegah suntikan SQL, gunakan pengendalian pengecualian dan sambungan penutup untuk debugging. 5) Mengoptimumkan prestasi melalui pengindeksan dan cache, tulis kod yang sangat mudah dibaca dan lakukan pengendalian ralat.

Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO)Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO)Apr 15, 2025 am 12:15 AM

Menggunakan penyataan preprocessing dan PDO dalam PHP secara berkesan dapat mencegah serangan suntikan SQL. 1) Gunakan PDO untuk menyambung ke pangkalan data dan tetapkan mod ralat. 2) Buat kenyataan pra -proses melalui kaedah menyediakan dan lulus data menggunakan ruang letak dan laksanakan kaedah. 3) Hasil pertanyaan proses dan pastikan keselamatan dan prestasi kod.

PHP dan Python: Contoh dan perbandingan kodPHP dan Python: Contoh dan perbandingan kodApr 15, 2025 am 12:07 AM

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

PHP dalam Tindakan: Contoh dan aplikasi dunia nyataPHP dalam Tindakan: Contoh dan aplikasi dunia nyataApr 14, 2025 am 12:19 AM

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP: Membuat kandungan web interaktif dengan mudahPHP: Membuat kandungan web interaktif dengan mudahApr 14, 2025 am 12:15 AM

PHP menjadikannya mudah untuk membuat kandungan web interaktif. 1) Secara dinamik menjana kandungan dengan memasukkan HTML dan paparkannya dalam masa nyata berdasarkan input pengguna atau data pangkalan data. 2) Penyerahan borang proses dan menjana output dinamik untuk memastikan bahawa htmlspecialchars digunakan untuk mencegah XSS. 3) Gunakan MySQL untuk membuat sistem pendaftaran pengguna, dan gunakan kata laluan dan preprocessing untuk meningkatkan keselamatan. Menguasai teknik ini akan meningkatkan kecekapan pembangunan web.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popularPHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popularApr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Relevannya PHP: Adakah ia masih hidup?Relevannya PHP: Adakah ia masih hidup?Apr 14, 2025 am 12:12 AM

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

See all articles

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)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).