


Cara 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!

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 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.

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 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 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 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 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.

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.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

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版
Alat pembangunan web visual

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).