Rumah >rangka kerja php >ThinkPHP >Amalan terbaik untuk melaksanakan ujian unit dalam ThinkPHP6

Amalan terbaik untuk melaksanakan ujian unit dalam ThinkPHP6

王林
王林asal
2023-06-21 10:31:361772semak imbas

Amalan terbaik untuk melaksanakan ujian unit dalam ThinkPHP6

Dengan keperluan untuk lelaran pantas dan penyampaian yang cekap dalam pembangunan perisian moden, ujian unit telah menjadi kaedah ujian automatik yang amat diperlukan. Dalam bahasa PHP, populariti rangka kerja ujian unit membolehkan pembangun tidak lagi perlu menguji setiap fungsi dan kaedah secara manual, tetapi boleh menulis kes ujian untuk menyemak ketepatan kod secara automatik. Dalam ThinkPHP6, rangka kerja ujian unit PHPUnit disepadukan ke dalam rangka kerja secara lalai dan mempunyai fungsi yang cukup lengkap dan prestasi cemerlang. Artikel ini akan memperkenalkan amalan terbaik tentang cara melaksanakan ujian unit dalam ThinkPHP6 dan berkongsi beberapa pengalaman dan teknik dalam amalan.

1. Pasang rangka kerja ujian unit PHPUnit

Rangka kerja ThinkPHP6 menyepadukan rangka kerja ujian unit PHPUnit secara lalai. Dalam pembangunan seterusnya, setiap kali kita perlu menjalankan ujian unit, kita hanya perlu melaksanakan arahan berikut dalam terminal:

php think test

Sebelum melaksanakan arahan ini, kita perlu memastikan bahawa PHP7.2 dan ke atas telah dipasang untuk projek Dan pengurus pakej Komposer dipasang. Dalam terminal, tukar ke direktori akar projek dan laksanakan arahan berikut untuk memasang PHPUnit:

composer require phpunit/phpunit

Hanya selepas persekitaran pembangunan PHP dan rangka kerja ujian unit PHPUnit berjaya dipasang, kami boleh mula melaksanakan ujian unit.

2. Kaedah menulis ujian unit

Ujian unit bergantung kepada pelbagai modul dalam sistem perniagaan dan perkaitannya, sebelum menulis ujian unit, kita perlu menguasai kod teras terlebih dahulu sistem perniagaan. Model hubungan dan keperluan perniagaan.

Dalam ThinkPHP6, kami boleh menulis ujian unit dengan mencipta folder lain yang dipanggil ujian dan kemudian meletakkan kes ujian di dalamnya. Kes ujian mestilah satu atau lebih ujian untuk kod PHP dan kita boleh menulis kelas ujian untuk melaksanakannya.

Dalam kelas ujian, kita boleh memulakan dan mengosongkan data ujian melalui kaedah setUp() dan tearDown(), atau kita boleh menggunakan fungsi khusus yang disediakan oleh PHPUnit untuk menegaskan antara nilai yang dijangkakan dan nilai sebenar . Hubungan antara mereka untuk menguji sama ada kod kami mematuhi logik yang diharapkan. Berikut ialah kelas ujian mudah:

<?php
use PHPUnitFrameworkTestCase;
use appmodelUser;

class UserTest extends TestCase
{
    protected $user;

    protected function setUp(): void
    {
        $this->user = new User(['name' => 'test', 'email' => 'test@test.com']);
    }

    public function testGetName()
    {
        $this->assertSame($this->user->name, 'test');
    }

    public function testGetEmail()
    {
        $this->assertSame($this->user->email, 'test@test.com');
    }

    protected function tearDown(): void
    {
        unset($this->user);
    }
}

Dalam kelas ujian di atas, kami mula-mula memulakan objek $user melalui kaedah setUp() dan kemudian menguji sama ada pembolehubah ahlinya $name dan $email ditetapkan dengan betul Persediaan dan tugasan. Selepas ujian selesai, kami menggunakan kaedah tearDown() untuk memadamkan objek $user daripada memori.

3. Ujian unit dalam aplikasi praktikal

Dalam aplikasi praktikal, kita perlu mempertimbangkan ujian unit model dan pengawal sistem perniagaan. Dalam ThinkPHP6, kami boleh menggunakan fungsi pembantu untuk mensimulasikan permintaan dan respons, dan menggunakan kelas operasi pangkalan data untuk membaca data ujian secara langsung. Berikut ialah contoh kes ujian untuk kelas model:

<?php
use PHPUnitFrameworkTestCase;
use appmodelGoods;

class GoodsTest extends TestCase
{
    public function testGetGoodsById()
    {
        // 模拟请求
        $request = request();
        $request->get(['id' => 1]);

        // 模拟响应
        $response = app()->http->run();
        $content = $response->getContent();

        // 断言响应是否符合预期
        $this->assertSame(
            '{"id":1,"name":"Apple iPhone 11","price":5999}',
            $content
        );
    }
}

Dalam kes ujian di atas, kami menulis kaedah ujian untuk mensimulasikan permintaan HTTP GET melalui objek $request untuk mendapatkan maklumat produk yang sepadan dengan produk id=1. Kemudian gunakan kaedah $app->http->run() untuk mensimulasikan respons, mengembalikan data yang sepadan dalam pelayan kepada rangka kerja ujian unit dan menegaskan sama ada nilai pulangan memenuhi jangkaan. Jika nilai pulangan adalah betul, ujian itu lulus, jika tidak ujian itu dianggap gagal.

Dalam pengawal, kami boleh menggunakan rangka kerja seperti Mockery untuk mensimulasikan, menyuntik objek dan operasi lain untuk menguji sama ada pengawal yang kami tulis sendiri memenuhi jangkaan.

Dalam aplikasi praktikal, kami juga perlu mempertimbangkan isu seperti liputan kes ujian yang komprehensif dan pengendalian suite ujian unit yang cekap. Masalah ini perlu diselesaikan mengikut keperluan perniagaan dalam pembangunan sebenar, dan alat pihak ketiga boleh digunakan untuk meningkatkan liputan ujian dan kecekapan ujian.

4. Ringkasan

Dalam ThinkPHP6, pelaksanaan ujian unit hanya bergantung pada PHP itu sendiri dan rangka kerja ujian unit PHPUnit. Apabila menulis kes ujian, kita perlu menguasai kod teras, perhubungan model dan keperluan perniagaan sistem perniagaan, dan mempertimbangkan pelbagai situasi khas dan outlier dalam kes ujian. Dalam aplikasi praktikal, kami juga perlu mempertimbangkan isu seperti liputan kes ujian yang komprehensif dan menjalankan suite ujian unit yang cekap. Ringkasnya, ujian unit memainkan peranan penting dalam menyelesaikan pepijat dalam sistem perniagaan, meningkatkan kecekapan pembangunan, meningkatkan kualiti kod dan mengurangkan kos penyelenggaraan sistem.

Atas ialah kandungan terperinci Amalan terbaik untuk melaksanakan ujian unit dalam ThinkPHP6. 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