Mục lục nội dung
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.
Bạn đang đọc: UNIT TESTING TUTORIAL: LÀM QUEN VỚI PHPUNIT
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.
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 =
: đảm bảo kết quả kiểm thử có màu."true"
Xem thêm: Tứ niệm xứ – Wikipedia tiếng Việt
<
: 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.phpdirectory
suffix =" Test. php ">./tests
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 .phpdirectory
suffix =". php ">./app
directory
>
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 .
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
Source: https://mindovermetal.org
Category: Wiki là gì