posted by Dương Quang Lộc on 2016-06-27 11:59

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

Fields with * are required.