Rumah > Artikel > pembangunan bahagian belakang > 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!