PHPUnit cung cấp một khung đơn giản để tạo bộ thử nghiệm nhằm tự động kiểm tra các hàm và lớp. PHPUnit được lấy cảm hứng từ JUnit, được tạo bởi Kent Beck và Erich Gamma như một công cụ cho Lập trình cực đoan. Một trong những quy tắc của XP là kiểm tra các thành phần phần mềm nhỏ thường xuyên và sớm nhất có thể, bằng cách này, bạn sẽ không phải sửa các lỗi và lỗi trong API trong khi thiết lập và kiểm tra các ứng dụng lớn hơn phụ thuộc vào lớp. Mặc dù kiểm tra đơn vị là một trong những quy tắc cơ bản trong XP, nhưng bạn không cần phải chuyển sang XP để hưởng lợi từ PHPUnit. PHPUnit độc lập như một công cụ tốt để kiểm tra các lớp hoặc một tập hợp các chức năng và sẽ giảm bớt chu kỳ phát triển của bạn và giúp bạn tránh các phiên gỡ lỗi vô tận
Thông thường, bạn sẽ viết một lớp, thực hiện một số bài kiểm tra phi hệ thống bằng cách sử dụng echo[] hoặc var_dump[]. Sau này, bạn sử dụng lớp trong ứng dụng của mình và hy vọng mọi thứ đều ổn. Để hưởng lợi từ PHPUnit, bạn nên suy nghĩ lại về quy trình. Cách tốt nhất là làm điều này
1. thiết kế lớp/API của bạn
2. tạo một bộ thử nghiệm
3. triển khai lớp/API
4. chạy bộ thử nghiệm
5. sửa lỗi hoặc lỗi và quay lại #4
Có vẻ như điều này sẽ đòi hỏi nhiều thời gian, nhưng ấn tượng này là sai. Tạo bộ thử nghiệm bằng PHPUnit chỉ cần vài phút và chạy bộ thử nghiệm chỉ vài giây
Hãy bắt đầu với một ví dụ nhỏ. một lớp chuỗi. Trước tiên, chúng tôi tạo một loạt các khai báo hàm để hoạt động trên một chuỗi
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false2
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false3
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false4
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false5
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false6
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false7
Bây giờ chúng ta có thể tạo một bộ kiểm tra, kiểm tra mọi chức năng của lớp chuỗi của bạn. Một bộ kiểm tra là lớp PHP bình thường được kế thừa từ PHPUnit_TestCase chứa các hàm kiểm tra, được xác định bởi một 'kiểm tra' hàng đầu trong tên hàm. Trong chức năng kiểm tra, giá trị dự kiến phải được so sánh với kết quả của chức năng để kiểm tra. Kết quả của phép so sánh này phải ủy quyền cho một chức năng của họ khẳng định*[], quyết định xem một chức năng có đạt hay không đạt bài kiểm tra
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false0
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false1
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false2
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false3
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false4
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false5
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false6
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false7
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false8
Bây giờ, chúng ta có thể chạy thử nghiệm đầu tiên. Đảm bảo rằng tất cả các đường dẫn đều chính xác và sau đó thực hiện chương trình PHP này
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false9
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false00
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false01
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false02
Nếu bạn gọi tập lệnh này từ dòng lệnh, bạn sẽ nhận được đầu ra sau
TestCase stringtest->testtostring[] không thành công. dự kiến đúng, thực tế sai
TestCase stringtest->testcopy[] không thành công. dự kiến , đối tượng thực tế
TestCase stringtest->testadd[] không thành công. mong đợi đúng, thực tế sai
Mọi hàm đều không vượt qua được bài kiểm tra, bởi vì các hàm chuỗi của bạn không trả về giá trị mà chúng tôi đã xác định là giá trị mong đợi
Nếu bạn muốn gọi tập lệnh thông qua trình duyệt của mình, bạn phải đặt tập lệnh vào đúng trang html và gọi $result->toHTML [] thay vì $result->toString[]
Ok, hãy bắt đầu với việc triển khai lớp chuỗi của chúng tôi
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false2
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false3
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false4
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false06
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false07
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false08
Việc triển khai hoàn tất và chúng ta có thể chạy thử nghiệm lại
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false0php -f chuỗi kiểm tra. php_______0
D'oh. bài kiểm tra cuối cùng thất bại. Chúng tôi đã mắc lỗi đánh máy. Thay đổi dòng 16 trong
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false09 thành
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false90
và chạy thử lại
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false0php -f chuỗi kiểm tra. php
TestCase stringtest->testtostring[] passed TestCase stringtest->testcopy[] passed TestCase stringtest->testadd[] failed: expected true, actual false9
Mọi thứ bây giờ đều ổn
Có vẻ như rất nhiều công việc để thử nghiệm ba chức năng đơn giản phải không? . Hãy nghĩ về các API lớn hơn, phức tạp hơn như trừu tượng hóa cơ sở dữ liệu hoặc các lớp giỏ hàng trong ứng dụng cửa hàng. PHPUnit là một công cụ tuyệt vời để phát hiện lỗi trong quá trình triển khai lớp của bạn
Thường thì bạn sẽ muốn triển khai lại hoặc cấu trúc lại một lớp lớn được sử dụng trong một số ứng dụng khác nhau. Nếu không có bộ kiểm tra, khả năng bạn vi phạm thứ gì đó trong một trong các ứng dụng phụ thuộc vào lớp của bạn là rất cao. Nhờ các bài kiểm tra đơn vị, bạn có thể tạo một bộ kiểm tra cho lớp của mình, sau đó triển khai lại lớp của bạn với sự an toàn khi biết rằng miễn là lớp mới vượt qua các bài kiểm tra, các ứng dụng phụ thuộc vào lớp sẽ hoạt động