Unit test, integration test và end-to-end test là gì?
Đáp án mẫu
Chúng kiểm thử hệ thống ở ba quy mô, đánh đổi tốc độ và độ cô lập lấy độ thực tế.
Unit test kiểm tra một phần nhỏ, như một hàm hoặc lớp, một cách cô lập. Các phụ thuộc được thay bằng đối tượng giả hoặc mock. Chúng rất nhanh, chỉ ra chính xác chỗ lỗi và ổn định, nên có thể có hàng nghìn test.
Integration test kiểm tra nhiều thành phần hoạt động cùng nhau, ví dụ một dịch vụ với database thật, hoặc hai dịch vụ qua hợp đồng API. Chúng tìm ra lỗi kết nối, cấu hình và truy vấn mà unit test không thấy. Chúng chậm hơn và cần thiết lập nhiều hơn.
End-to-end (E2E) test điều khiển toàn bộ hệ thống qua giao diện người dùng hoặc API công khai, như một người dùng thật, ví dụ đăng nhập rồi đặt hàng. Chúng cho độ tin cậy cao nhất rằng các luồng thật hoạt động, nhưng chậm nhất, dễ vỡ nhất và khó debug nhất.
Kim tự tháp kiểm thử gợi ý nhiều unit test, ít integration test hơn và một số ít E2E test cho các hành trình quan trọng. Hãy chọn mức thấp nhất có thể bắt được lỗi.
Ý chính
- Unit: một phần nhỏ được cô lập; nhanh và chính xác
- Integration: nhiều thành phần cùng nhau, như dịch vụ với database
- E2E: toàn bộ luồng người dùng; thực tế nhất nhưng chậm và dễ vỡ
- Kim tự tháp kiểm thử: nhiều unit, ít integration hơn, rất ít E2E
Câu hỏi nối tiếp thường gặp
- Mock và stub khác nhau thế nào?
- Những luồng nào đáng có một E2E test?
Lỗi thường gặp
- Viết chủ yếu E2E test và kết quả là bộ test chậm, hay chập chờn
- Mock quá nhiều trong unit test đến mức chỉ đang kiểm thử các mock