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
Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Apr 17, 2025 am 12:25 AM

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Apr 17, 2025 am 12:24 AM

Dalam PHP, gunakan kata kunci klon untuk membuat salinan objek dan menyesuaikan tingkah laku pengklonan melalui kaedah Magic \ _ _ _. 1. Gunakan kata kunci klon untuk membuat salinan cetek, mengkloning sifat objek tetapi bukan sifat objek. 2. Kaedah klon \ _ \ _ boleh menyalin objek bersarang untuk mengelakkan masalah menyalin cetek. 3. Beri perhatian untuk mengelakkan rujukan pekeliling dan masalah prestasi dalam pengklonan, dan mengoptimumkan operasi pengklonan untuk meningkatkan kecekapan.

PHP vs Python: Gunakan Kes dan AplikasiPHP vs Python: Gunakan Kes dan AplikasiApr 17, 2025 am 12:23 AM

PHP sesuai untuk pembangunan web dan sistem pengurusan kandungan, dan Python sesuai untuk sains data, pembelajaran mesin dan skrip automasi. 1.PHP berfungsi dengan baik dalam membina laman web dan aplikasi yang cepat dan berskala dan biasanya digunakan dalam CMS seperti WordPress. 2. Python telah melakukan yang luar biasa dalam bidang sains data dan pembelajaran mesin, dengan perpustakaan yang kaya seperti numpy dan tensorflow.

Huraikan tajuk caching HTTP yang berbeza (mis., Cache-Control, ETAG, Modified Last).Huraikan tajuk caching HTTP yang berbeza (mis., Cache-Control, ETAG, Modified Last).Apr 17, 2025 am 12:22 AM

Pemain utama dalam tajuk cache HTTP termasuk kawalan cache, ETAG, dan modifikasi terakhir. 1.Cache-Control digunakan untuk mengawal dasar caching. Contoh: Cache-Control: Max-Age = 3600, Awam. 2. ETAG mengesahkan perubahan sumber melalui pengenal unik, Contoh: ETAG: "686897696A7C876B7E". 3. Modified Last Menunjukkan Masa Pengubahsuaian Terakhir Sumber, Contoh: Modified Last: Wed, 21OCT201507: 28: 00GMT.

Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1?Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1?Apr 17, 2025 am 12:06 AM

Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP: Pengenalan kepada bahasa skrip sisi pelayanPHP: Pengenalan kepada bahasa skrip sisi pelayanApr 16, 2025 am 12:18 AM

PHP adalah bahasa skrip sisi pelayan yang digunakan untuk pembangunan web dinamik dan aplikasi sisi pelayan. 1.Php adalah bahasa yang ditafsirkan yang tidak memerlukan kompilasi dan sesuai untuk perkembangan pesat. 2. Kod PHP tertanam dalam HTML, menjadikannya mudah untuk membangunkan laman web. 3. PHP memproses logik sisi pelayan, menghasilkan output HTML, dan menyokong interaksi pengguna dan pemprosesan data. 4. PHP boleh berinteraksi dengan pangkalan data, penyerahan borang proses, dan melaksanakan tugas-tugas sampingan pelayan.

PHP dan Web: Meneroka kesan jangka panjangnyaPHP dan Web: Meneroka kesan jangka panjangnyaApr 16, 2025 am 12:17 AM

PHP telah membentuk rangkaian sejak beberapa dekad yang lalu dan akan terus memainkan peranan penting dalam pembangunan web. 1) PHP berasal pada tahun 1994 dan telah menjadi pilihan pertama bagi pemaju kerana kemudahan penggunaannya dan integrasi lancar dengan MySQL. 2) Fungsi terasnya termasuk menghasilkan kandungan dinamik dan mengintegrasikan dengan pangkalan data, yang membolehkan laman web dikemas kini secara real time dan dipaparkan secara peribadi. 3) Aplikasi dan ekosistem PHP yang luas telah mendorong kesan jangka panjangnya, tetapi ia juga menghadapi kemas kini versi dan cabaran keselamatan. 4) Penambahbaikan prestasi dalam beberapa tahun kebelakangan ini, seperti pembebasan Php7, membolehkannya bersaing dengan bahasa moden. 5) Pada masa akan datang, PHP perlu menangani cabaran baru seperti kontena dan microservices, tetapi fleksibiliti dan komuniti aktif menjadikannya boleh disesuaikan.

Mengapa menggunakan PHP? Kelebihan dan faedah dijelaskanMengapa menggunakan PHP? Kelebihan dan faedah dijelaskanApr 16, 2025 am 12:16 AM

Manfaat utama PHP termasuk kemudahan pembelajaran, sokongan pembangunan web yang kukuh, perpustakaan dan kerangka yang kaya, prestasi tinggi dan skalabilitas, keserasian silang platform, dan keberkesanan kos. 1) mudah dipelajari dan digunakan, sesuai untuk pemula; 2) integrasi yang baik dengan pelayan web dan menyokong pelbagai pangkalan data; 3) mempunyai rangka kerja yang kuat seperti Laravel; 4) Prestasi tinggi dapat dicapai melalui pengoptimuman; 5) menyokong pelbagai sistem operasi; 6) Sumber terbuka untuk mengurangkan kos pembangunan.

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)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

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.

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa