Unit Testing in PHP with PHPUnit
Testing là một trong những giai đoạn quang trọng trong vòng đời phát triển ứng dụng. Unit test không chỉ giúp giảm bớt căng thẳng trong quá trình phát triển mà còn làm việc duy trì code của bạn trở nên dễ dàng hơn, cho phép bạn thực hiện nhiều những thay đổi một cách tự do mà không hề suy nghĩ gì nhiều.
PHPUnit là một 'programmer-oriented testing framework' dành riêng cho PHP.
I. Cài đặc PHPUnit.
_ PHPUnit 5.4 sử dụng PHP 5.6, tốt nhất chúng ta nên cài đặc bản mới nhất của PHP.
_ Cài đặc PHPUnit Từ terminal:
curl https://phar.phpunit.de/phpunit.phar -L -o phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit
Sau khi cài đặc thành công, kiểm tra phiên bản của phpunit:
Composer
Thêm phpunit/phpunit vào file composer.json trong project nếu project có sử dụng composser để quản lý các thư viện ngoài.
II. Viết Tests đầu tiên sử dụng PHPUnit
Với PHPUnit, điều cơ bản nhất là tạo ra các test case. Ví dụ dưới đâyđây giới thiệu conventions cơ bản và các bước để viết test sử dụng PHPUnit.
1. Tên một class được dùng để test cho class A thì có tên là ATest.
2. ClassTest được thừa kế từ phpunit\framework\TestCase
3. Các phương thức test có định dạng test*.
Ví dụ 1:
Class sử dụng cho việc test RemoteConnect.php
Nếu chúng ta muốn test chức năng này thì file test của chúng ta là RemoteConnectTest.php
Class chúng ta sử dụng hàm assertTrue, là một trong những hàm hỗ trợ của PHPUnit, assertTrue đơn giản chỉ kiểm tra biểu thức Boolean là True hay False.
Chạy Test
Việc chạy test đơn giản gọi lệnh phpunit và đường dẫn file muốn test.
Với một bài test được chạy bạn sẽ nhìn thấy một dấu . nếu thành công và F nếu thất bại.
Thời gian test và vùng nhơ chiếm dụng cugnx được hiện thị.
Assertion là các phương thức cốt lõi để tạo ra một test, có nhiều assertion khác nhau giúp test kết quả của tất cả các loại lời gọi trong ứng dụng của bạn.
AssertTrue
/AssertFalse
Kiểm tra đầu vào để xác minh nó là true hay false;AssertEquals
Kiểm tra kết quả dựa theo các đầu vào khác;AssertGreaterThan
Kiểm tra kết quả để xem nó có lớn hơn một giá trị hay không (có cả LessThan, GreaterThanOrEqual, và LessThanOrEqual);AssertContains
Kiểm tra xem đầu vào có chứa một giá trị nào đó;AssertType
Kiểm tra xem biến là kiểu nào;AssertNull
Kiểm tra xem một biến là null;AssertFileExists
Xác minh sự tồn tại của một file;AssertRegExp
Kiểm tra đầu vào dựa theo một biểu thức chính quy.
III Test Dependencies
PHPUnit hỗ trợ việc định nghĩa các phụ thuộc giữa các phương thức của nhưgnx test khác nhau. Dependencies không phải là việc định nghĩa các test theo một trình tự nhất định rồi thực hiện việc test từ test này sang test khác mà nó cho phép sử dụng kết quả return từ một test này để sử dụng cho test khác.
2 khái niệm được sử dụng cho dêpndencies là
_ Producer là một test method được sử dụng để return về một value nào đó.
_ Consumer là một test method phụ thuộc vào một hoặc nhiều producer khác giữa các method test.
Ví dụ 2: Sử dụng @depends anoaion để định nghĩa dependencies giữa các test methods.
Chạy Test
III. Data Providers
Một test method có thể có nhiều arguments khác nhau. Các arguements đó được cung cấp bởi một data provider method (additionProvider()). @dataProvider annotation được sử dụng để chỉ định một data provider method.
Một data provider method phải được định nghĩa public và return một array chứa các arrays hoặc là object.
Ví dụ: Sử dụng data provider return một array chứa các array khác.
Run Test
IV. Testing Exception
Ví dụ sau nêu ra cách sử dụng expectException() method để test khi xảy ra exception khi xảy ra việc test
Các phương thức expectException(), expectExceptionCode(), expectExceptionMessage() và expectExceptionMessageRegExp() để việc set up các ngoại lệ xảy ra khi code test được thực thi.
Một cách khác chúng ta cũng có thể sử dụng các annotations @expectedException, @expectedExeptionCode, @expetedExceptionMessage.
V. Testing PHP Errors
Mặc định PHPUnit tự động chuyển các lỗi, các cảnh báo và chú ý của PHP trong quá trình thực hiện testtest khi có xảy ra exception.
Ví dụ:
VI. Tổng Kết
Đây là một sự khởi đầu và giới thiệt về unit test sử dụng PHPUnit. Một số các kiến thức cơ bạn nhằm đáp ứng cho việc nghiên cứu sâu hơn phục vụ cho quá trình tạo ra test cho riêng mình.
Có thể tham khảo thêm tại phpunit.
Leave a Comment