UNIT TESTING TUTORIAL: LÀM QUEN VỚI PHPUNIT

Chuỗi bài viết nâng cao về PHPUnit kỳ vọng mang đến cho không chỉ những PHP Developer mới mà cả những người có nhiều năm kinh nghiệm tay nghề cái nhìn thân thiện và tổng quan hơn với PHPUnit, đồng thời, giúp cho những Quản lý dự án Bất Động Sản có những sample tìm hiểu thêm khi dự án Bất Động Sản có sử dụng Unit Testing hoặc dự án Bất Động Sản tăng trưởng theo TDD .Bài viết sẽ trình làng những khái niệm cốt lõi của testing, cho bạn biết tại sao “ dependency injection is king ” và sự độc lạ giữa mock và stub là gì ? Quan trọng hơn, bạn sẽ dễ gật đầu những thống kê tồi về ứng dụng để nâng cao chất lượng của mẫu sản phẩm, cho những developer thói quen sử dụng command và làm cách nào để có màu đỏ hay màu xánh lá .

I. PHPUnit là gì?

PHPUnit là một khung kiểm thử đơn vị chức năng ( a unit testing framework ) cho ngôn từ PHP. Nó cung ứng cho người dùng rất nhiều những class – phương pháp giúp cho việc viết những đoạn mã kiểm thử trở nên nhanh gọn và thuận tiện. Từ đó, tất cả chúng ta hoàn toàn có thể tiết kiệm ngân sách và chi phí được nhiều thời hạn test .

II. Chuẩn bị

Để có môi trường phát triển, bạn nên sử dụng máy ảo (Ví dụ như Docker) để giả lập môi trường máy chủ, thay vì sử dụng ngay trên hệ điều hành của hiện tại, và dùng CMD để chạy các lệnh. Nếu bạn đã quen với việc làm mọi thứ trên giao diện GUI, thì đây là lúc bạn nghĩ đến việc dùng CMD rồi.

III. Sử dụng PHPUnit

1. Cài đặt PHPUnit

Cách đơn thuần nhất là sử dụng composer, khi đó, bạn nên quan tâm đến PSR-4 Autoloading .Để cài PHPUnit, tất cả chúng ta chỉ cần một dòng trong file composer.json

{

    "require": {

        "php": "^7.2.5"

    },

    "require-dev": {

        "phpunit/phpunit": "^8.5"

    }

}

Bạn nên sử dụng XDebug – một trình gỡ lỗi giúp bạn không thành “ người tối cổ ” khi vẫn dùng echo, print_r, var_dump, và cũng là công cụ tuyệt vời khi thao tác với PHPUnit .Để composer tải xuống thư viện mới, bạn chỉ cần chạy lệnh

composer update --dev

2. Chạy PHPUnit

Bạn chỉ cần gõ: ./vendor/bin/phpunit sẽ ra file mà bạn chủ yếu tương tác, còn việc load các file để testing thì composer tự tìm và load rồi.

Khi chạy PHPUnit ./vendor/bin/phpunit sẽ cho bạn biết tất cả các tùy chọn có sẵn của bạn.

PHPUnit

3. Cấu trúc của dự án

Vì sử dụng composer nên sẽ mất một chút thời gian để thiết lập dự án và khiến mọi thứ hoạt động với autoloader. Đặt namespace có mã nguồn của mình là App và namespace cho mã nguồn của PHPUnit là Tests.

Cập nhật file composer.json

{

    "require": {

        "php": "^7.2.5"

    },

    "require-dev": {

        "phpunit/phpunit": "^8.5"

    },

    "autoload": {

        "psr-4": {

            "App\\":"app/"

        }

    },

    "autoload-dev": {

        "psr-4": {

            "Tests\\": "tests/"

        }

    }

}

Sau đó, chúng ta chạy lệnh để update composer bằng lệnh composer update. Toàn bộ mã nguồn dự án sẽ nằm trong thư mục app, mã nguồn testing nằm trong thư mục tests, cùng cấp với thư mục vendor.

app/

composer.json

tests/

vendor/

4. Thiết lập phpunit.xml

Khi chạy PHPUnit nó sẽ chạy với thông số kỹ thuật mặc định. Bạn hoàn toàn có thể ghi đè những giá trị mặc định trải qua dòng lệnh. Nhưng cách tốt hơn cả là thông số kỹ thuật trải qua file phpunit.xml .Trong thư mục gốc của dự án Bất Động Sản ta tạo một file phpunit.xml như sau :

<phpunit colors="true">

    <testsuites>

        <testsuite name="Application Test Suite">

            <directory suffix="Test.php">./testsdirectory

>

        testsuite

>

    testsuites

>

    <filter>

        <whitelist processUncoveredFilesFromWhitelist="true">

            <directory suffix=".php">./appdirectory

>

        whitelist

>

    filter

>

phpunit

>Đây là file thông số kỹ thuật đơn thuần nhưng cực kỳ quan trọng .

  • colors =

    "true"

    : đảm bảo kết quả kiểm thử có màu.

  • <

    directory

    suffix =" Test. php ">./tests

    directory

    >

    : Nơi mã nguồn kiểm thử của bạn được đặt và khi chạy nó chỉ chạy các file có kết thúc bằng Test.php

  • <

    directory

    suffix =". php ">./app

    directory

    >

    : Nơi chứa mã nguồn cần kiểm thử và chỉ kiểm thử file có kết thúc bằng .php

Tất cả các unit testing của bạn phải đặt trong thư mục test/

5. Convention

Convention giúp cho việc teamwork, hoặc maintain, … thuận tiện hơn .

File structure và file name

Qui ước đầu tiên của chúng ta là về cấu trúc file và tên file.
Tên của file kiểm thử phải trùng với tên của file mã nguồn được kiểm thử và có Test gắn thêm vào.

Ví dụ:
Nếu ta có các files mã nguồn sau:

app / Foo. phpapp / Bar. php

Thì ta có những files mã nguồn kiểm thử như sau :

tests / FooTest. phptests / BarTest. php

Class names

Class name phải giống hệt tên file. Điều này áp dung cho tổng thể những file. php trong thư mục app, và tests

Method names

Tên phương pháp kiểm thử khởi đầu bằng test. Tên phương pháp nên miêu tả về những gì đang được kiểm thử, gồm có tên của phương pháp được kiểm thử, và không được viết tắt .

Ví dụ: nếu bạn đang kiểm thử một phương thức được gọi verifyAccount()và trong một kiểm thử đơn vị, bạn muốn kiểm tra xem mật khẩu có khớp hay không, bạn sẽ đặt tên cho phương thức kiểm thử của mình testVerifyAccountMatchesPasswordGiven().

Độ dài của tên phương pháp kiểm thử ở đây là một lợi thế. Bởi khi có nhiều kiểm thử không thành công xuất sắc, ta sẽ thuận tiện biết đúng mực những gì thất bại nhờ vào tên phương pháp, từ đó hoàn toàn có thể nhanh gọn thực thi sửa lỗi .

Các Method kiểm thử phải là public

PHPUnit không hề chạy những phương pháp protect hoặc private nên chúng phải là public. Tất cả những phương pháp helpers cũng phải public. Chúng ta không kiến thiết xây dựng public API mà chỉ muốn viết unit test nên không cần lo ngại về năng lực truy vấn của nó .

Kế thừa PHPUnit

Tất cả những class kiểm thử phải extends class \ PHPUnit \ Framework \ TestCase hoặc một class có extends \ PHPUnit \ Framework \ TestCase

IV. Chạy thử

Kiểm thử tiên phong của tất cả chúng ta sẽ ngắn và hoàn toàn có thể là “ ngớ ngẩn ”, nhưng nó sẽ ở mức tối thiểu thiết yếu cho một kiểm thử .

Tạo mới một file: test/StupidTest.php

namespace Tests;

use PHPUnit\Framework\TestCase;

class StupidTest extends TestCase

{

     //

}

Nội dung này không có gì đặc biệt, cho thấy ta đã tuân thủ theo 3 quy tắc bên trên.
Tiếp theo ta sẽ thực hiện một kiểm thử với assertion là true. Hãy tạo một method testTrueIsTrue

// ...

    public function testTrueIsTrue()

    {

        //

    }

Sau đây là mã kiểm thử của nó .

// ...

    public function testTrueIsTrue()

    {

        $foo = true;

        $this->assertTrue($foo);

    }

Từ thư mục gốc dự án ta chạy lệnh: $ vendor/bin/phpunit

Bạn sẽ nhìn thấy thanh màu xanh ( lá ) kỳ vọng .

PHPUnit

Bạn đã chạy một test và xác nhận duy nhất một assertion .

 

V. Kết luận

Vậy là ta đã hoàn thành cài đặt PHPUnit bằng composer, thiết lập cấu hình cho PHPUnit, và chạy một kiểm thử đầu tiên.
Có vẻ bạn sẽ thấy những bước đầu tiên này chưa đem lại tác dụng gì cụ thể, nhưng nó củng cố ý tưởng rằng: unit testing không phải là một khái niệm cao siêu, huyền bí, chỉ giáo sư mới hiểu được. Thực ra nó chỉ là một đoạn code được chúng ta tạo nên. Và đoạn code ấy cho chúng ta biết mình đã làm sai ở chỗ nào.

Phần tiếp theo ta sẽ tìm hiểu và khám phá sâu hơn về những assertion, và dataProvider. Hẹn gặp lại những bạn ở những bài viết sau !

Trịnh Văn Thành – CO-WELL Asia

5/5 - (1 vote)

Bài viết liên quan

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments