PHPUnit là một khung kiểm tra đơn vị cho ngôn ngữ lập trình PHP. Nó là một ví dụ về kiến trúc xUnit cho các khung kiểm tra đơn vị có nguồn gốc từ SUnit và trở nên phổ biến với JUnit. PHPUnit được tạo bởi Sebastian Bergmann và quá trình phát triển của nó được lưu trữ trên GitHub
Mục đích[sửa]
PHPUnit dựa trên ý tưởng rằng các nhà phát triển có thể nhanh chóng tìm ra lỗi trong mã mới được cam kết của họ và khẳng định rằng không có hồi quy mã nào xảy ra trong các phần khác của cơ sở mã. Giống như các khung kiểm tra đơn vị khác, PHPUnit sử dụng các xác nhận để xác minh rằng hành vi của thành phần cụ thể - hoặc "đơn vị" - đang được kiểm tra hoạt động như mong đợi. [3]
Lợi ích[sửa]
Mục tiêu của kiểm thử đơn vị là cô lập từng phần của chương trình và chỉ ra rằng từng phần đó là chính xác. Một bài kiểm tra đơn vị cung cấp một hợp đồng nghiêm ngặt bằng văn bản mà đoạn mã phải đáp ứng. Kết quả là, các bài kiểm tra đơn vị tìm ra vấn đề sớm trong chu kỳ phát triển
PHPUnit có thể xuất kết quả kiểm tra ở một số định dạng khác nhau, bao gồm JUnit XML và TestDox
Lỗ hổng[sửa]
Một lỗ hổng cho phép kẻ tấn công thực thi mã từ xa thông qua PHPUnit đã được phát hiện vào cuối năm 2017. Bằng cách gửi trọng tải mã PHP tới một tệp là một phần của PHPUnit, kẻ tấn công có thể thực thi mã PHP trên máy chủ web. [4]
Laravel được xây dựng với mục đích thử nghiệm. Trên thực tế, hỗ trợ kiểm tra với PHPUnit được bao gồm sẵn và một tệp
php artisan make:test UserTest --unit
0 đã được thiết lập cho ứng dụng của bạn. Khung này cũng cung cấp các phương thức trợ giúp thuận tiện cho phép bạn kiểm tra rõ ràng các ứng dụng của mìnhTheo mặc định, thư mục
php artisan make:test UserTest --unit
1 của ứng dụng của bạn chứa hai thư mục. php artisan make:test UserTest --unit
2 và php artisan make:test UserTest --unit
3. Bài kiểm tra đơn vị là bài kiểm tra tập trung vào một phần rất nhỏ, riêng biệt trong mã của bạn. Trên thực tế, hầu hết các bài kiểm tra đơn vị có thể tập trung vào một phương pháp duy nhất. Các kiểm tra trong thư mục kiểm tra "Đơn vị" của bạn không khởi động ứng dụng Laravel của bạn và do đó không thể truy cập cơ sở dữ liệu của ứng dụng hoặc các dịch vụ khung khácCác bài kiểm tra tính năng có thể kiểm tra phần lớn mã của bạn, bao gồm cách một số đối tượng tương tác với nhau hoặc thậm chí là một yêu cầu HTTP đầy đủ tới một điểm cuối JSON. Nói chung, hầu hết các bài kiểm tra của bạn phải là bài kiểm tra tính năng. Các loại thử nghiệm này mang lại sự tự tin nhất rằng toàn bộ hệ thống của bạn đang hoạt động như dự kiến
Tệp
php artisan make:test UserTest --unit
4 được cung cấp trong cả thư mục kiểm tra php artisan make:test UserTest --unit
2 và php artisan make:test UserTest --unit
3. Sau khi cài đặt ứng dụng Laravel mới, hãy thực hiện các lệnh php artisan make:test UserTest --unit
7 hoặc php artisan make:test UserTest --unit
8 để chạy thử nghiệm của bạnMôi trường
Khi chạy thử nghiệm, Laravel sẽ tự động đặt môi trường cấu hình thành
php artisan make:test UserTest --unit
9 do các biến môi trường được xác định trong tệp php artisan make:test UserTest --unit
0. Laravel cũng tự động định cấu hình phiên và bộ đệm cho trình điều khiển php artisan make:test UserTest --unit
11 trong khi thử nghiệm, nghĩa là sẽ không có dữ liệu phiên hoặc bộ đệm nào được duy trì trong khi thử nghiệmBạn có thể tự do xác định các giá trị cấu hình môi trường thử nghiệm khác nếu cần. Các biến môi trường
php artisan make:test UserTest --unit
9 có thể được định cấu hình trong tệp php artisan make:test UserTest --unit
0 của ứng dụng của bạn, nhưng hãy đảm bảo xóa bộ nhớ cache cấu hình của bạn bằng lệnh php artisan make:test UserTest --unit
14 Artisan trước khi chạy thử nghiệmTệp môi trường php artisan make:test UserTest --unit
15
php artisan make:test UserTest --unit
Ngoài ra, bạn có thể tạo tệp
php artisan make:test UserTest --unit
15 trong thư mục gốc của dự án của mình. Tệp này sẽ được sử dụng thay cho tệp php artisan make:test UserTest --unit
17 khi chạy thử nghiệm PHPUnit hoặc thực thi lệnh Artisan với tùy chọn php artisan make:test UserTest --unit
18Tính cách php artisan make:test UserTest --unit
19
php artisan make:test UserTest --unit
Laravel bao gồm một đặc điểm
php artisan make:test UserTest --unit
19 được áp dụng cho lớp cơ sở php artisan make:test UserTest --unit
11 của ứng dụng của bạn. Đặc điểm này chứa một phương thức php artisan make:test UserTest --unit
12 khởi động ứng dụng Laravel trước khi chạy thử nghiệm của bạn. Điều quan trọng là bạn phải để đặc điểm này ở vị trí ban đầu vì một số tính năng, chẳng hạn như tính năng kiểm tra song song của Laravel, phụ thuộc vào nóTạo bài kiểm tra
Để tạo một trường hợp thử nghiệm mới, hãy sử dụng lệnh Artisan
php artisan make:test UserTest --unit
13. Theo mặc định, các bài kiểm tra sẽ được đặt trong thư mục php artisan make:test UserTest --unit
14php artisan make:test UserTest --unit
5Nếu bạn muốn tạo một bài kiểm tra trong thư mục
php artisan make:test UserTest --unit
15, bạn có thể sử dụng tùy chọn php artisan make:test UserTest --unit
16 khi thực hiện lệnh php artisan make:test UserTest --unit
13php artisan make:test UserTest --unit
Nếu bạn muốn tạo một bài kiểm tra Pest PHP, bạn có thể cung cấp tùy chọn
php artisan make:test UserTest --unit
18 cho lệnh php artisan make:test UserTest --unit
13php artisan make:test UserTest --unit
1Lưu ý
Sơ khai bài kiểm tra có thể được tùy chỉnh bằng cách xuất bản sơ khai.
Khi thử nghiệm đã được tạo, bạn có thể xác định các phương thức thử nghiệm như bình thường bằng cách sử dụng PHPUnit. Để chạy thử nghiệm của bạn, hãy thực hiện lệnh
php artisan make:test UserTest --unit
7 hoặc php artisan make:test UserTest --unit
8 từ thiết bị đầu cuối của bạnphp artisan make:test UserTest --unit
1Cảnh báo
Nếu bạn định nghĩa các phương thức62 /
php artisan make:test UserTest --unit
63 của riêng mình trong một lớp thử nghiệm, hãy đảm bảo gọi các phương thức
php artisan make:test UserTest --unit
64 /
php artisan make:test UserTest --unit
65 tương ứng trên lớp cha.
php artisan make:test UserTest --unit
Chạy thử nghiệm
Như đã đề cập trước đây, khi bạn đã viết bài kiểm tra, bạn có thể chạy chúng bằng cách sử dụng
php artisan make:test UserTest --unit
66Ngoài lệnh
php artisan make:test UserTest --unit
66, bạn có thể sử dụng lệnh php artisan make:test UserTest --unit
68 Artisan để chạy thử nghiệm của mình. Trình chạy thử Artisan cung cấp các báo cáo thử nghiệm chi tiết để dễ dàng phát triển và gỡ lỗiBất kỳ đối số nào có thể được chuyển tới lệnh
php artisan make:test UserTest --unit
66 cũng có thể được chuyển tới lệnh Artisan php artisan make:test UserTest --unit
68php artisan make:test UserTest --unit
6Chạy thử nghiệm song song
Theo mặc định, Laravel và PHPUnit thực hiện tuần tự các bài kiểm tra của bạn trong một quy trình duy nhất. Tuy nhiên, bạn có thể giảm đáng kể lượng thời gian chạy thử nghiệm của mình bằng cách chạy thử nghiệm đồng thời trên nhiều quy trình. Để bắt đầu, đảm bảo ứng dụng của bạn phụ thuộc vào phiên bản
php artisan make:test UserTest --unit
61 hoặc cao hơn của gói php artisan make:test UserTest --unit
62. Sau đó, bao gồm tùy chọn php artisan make:test UserTest --unit
63 khi thực hiện lệnh php artisan make:test UserTest --unit
68 ArtisanTheo mặc định, Laravel sẽ tạo bao nhiêu quy trình tùy theo số lõi CPU có sẵn trên máy của bạn. Tuy nhiên, bạn có thể điều chỉnh số lượng quy trình bằng tùy chọn
php artisan make:test UserTest --unit
65php artisan make:test UserTest --unit
6Cảnh báo
Khi chạy thử nghiệm song song, một số tùy chọn PHPUnit [chẳng hạn như66] có thể không khả dụng.
php artisan make:test UserTest --unit
Kiểm tra song song & Cơ sở dữ liệu
Miễn là bạn đã định cấu hình kết nối cơ sở dữ liệu chính, Laravel sẽ tự động xử lý việc tạo và di chuyển cơ sở dữ liệu thử nghiệm cho từng quy trình song song đang chạy thử nghiệm của bạn. Cơ sở dữ liệu thử nghiệm sẽ được thêm vào một mã thông báo quy trình duy nhất cho mỗi quy trình. Ví dụ: nếu bạn có hai quy trình kiểm tra song song, Laravel sẽ tạo và sử dụng cơ sở dữ liệu kiểm tra
php artisan make:test UserTest --unit
67 và php artisan make:test UserTest --unit
68Theo mặc định, cơ sở dữ liệu kiểm tra vẫn tồn tại giữa các lần gọi lệnh
php artisan make:test UserTest --unit
68 Artisan để chúng có thể được sử dụng lại bởi các lần gọi php artisan make:test UserTest --unit
68 tiếp theo. Tuy nhiên, bạn có thể tạo lại chúng bằng tùy chọn php artisan make:test UserTest --unit
71php artisan make:test UserTest --unit
7Móc kiểm tra song song
Đôi khi, bạn có thể cần chuẩn bị một số tài nguyên nhất định được sử dụng bởi các thử nghiệm của ứng dụng để chúng có thể được sử dụng an toàn bởi nhiều quy trình thử nghiệm
Sử dụng mặt tiền
php artisan make:test UserTest --unit
72, bạn có thể chỉ định mã sẽ được thực thi trên php artisan make:test UserTest --unit
62 và php artisan make:test UserTest --unit
63 của quy trình hoặc trường hợp thử nghiệm. Các bao đóng đã cho nhận các biến php artisan make:test UserTest --unit
75 và php artisan make:test UserTest --unit
76 chứa mã thông báo quy trình và trường hợp thử nghiệm hiện tại, tương ứngphp artisan make:test UserTest --unit
4Truy cập mã thông báo kiểm tra song song
Nếu bạn muốn truy cập "mã thông báo" quy trình song song hiện tại từ bất kỳ vị trí nào khác trong mã kiểm tra ứng dụng của mình, bạn có thể sử dụng phương pháp
php artisan make:test UserTest --unit
77. Mã thông báo này là mã định danh chuỗi, duy nhất cho một quy trình kiểm tra riêng lẻ và có thể được sử dụng để phân đoạn tài nguyên trên các quy trình kiểm tra song song. Ví dụ: Laravel tự động thêm mã thông báo này vào cuối cơ sở dữ liệu thử nghiệm được tạo bởi mỗi quy trình thử nghiệm song songphp artisan make:test UserTest --unit
6Báo cáo phạm vi kiểm tra
Cảnh báo
Tính năng này yêu cầu Xdebug hoặc PCOV.
Khi chạy thử nghiệm ứng dụng của mình, bạn có thể muốn xác định xem các trường hợp thử nghiệm của mình có thực sự bao gồm mã ứng dụng hay không và lượng mã ứng dụng được sử dụng khi chạy thử nghiệm của bạn. Để thực hiện điều này, bạn có thể cung cấp tùy chọn
php artisan make:test UserTest --unit
78 khi gọi lệnh php artisan make:test UserTest --unit
68Thực thi ngưỡng bảo hiểm tối thiểu
Bạn có thể sử dụng tùy chọn
php artisan make:test UserTest --unit
40 để xác định ngưỡng phạm vi kiểm tra tối thiểu cho ứng dụng của mình. Bộ kiểm tra sẽ thất bại nếu ngưỡng này không được đáp ứng