Kiểm tra đơn vị là các thử nghiệm mà mã được kiểm tra nằm trong lớp thực tế. Một phụ thuộc khác của lớp này được mô phỏng hoặc bỏ qua, vì trọng tâm là kiểm tra mã bên trong lớp.
Kiểm tra tích hợp là các thử nghiệm liên quan đến truy cập đĩa, dịch vụ ứng dụng và/hoặc khung từ ứng dụng đích. Các thử nghiệm tích hợp chạy bị cô lập từ các dịch vụ khác.
Tôi sẽ đưa ra một ví dụ. Bạn có một ứng dụng Spring và bạn đã thực hiện rất nhiều bài kiểm tra đơn vị để đảm bảo rằng logic nghiệp vụ hoạt động đúng. Hoàn hảo. Nhưng những loại xét nghiệm, bạn phải đảm bảo:
- dịch vụ ứng dụng của bạn có thể bắt đầu
- tổ chức cơ sở dữ liệu của bạn được ánh xạ một cách chính xác
- Bạn có tất cả các chú thích cần thiết làm việc như mong đợi
- Bộ lọc của bạn đang hoạt động bình thường
- API của bạn đang chấp nhận một số loại dữ liệu
- Tính năng chính của bạn là thực sự làm việc trong kịch bản cơ bản
- truy vấn cơ sở dữ liệu của bạn đang làm việc như mong đợi
- Etc ...
này không thể được thực hiện với các bài kiểm tra đơn vị nhưng bạn (tốt, mùa xuân Slice có thể làm một số trong số họ ...), như nhà phát triển, bạn cũng cần đảm bảo điều đó. Đây là vai trò của các bài kiểm tra tích hợp.
Kịch bản lý tưởng là các thử nghiệm tích hợp chạy độc lập với các hệ thống khác mà ứng dụng có thể sử dụng trong môi trường sản xuất (sử dụng Wiremock for Rest calls, cơ sở dữ liệu bộ nhớ, v.v.).
Một chút tò mò: Maven có một plugin cụ thể cho Kiểm tra tích hợp: maven failsafe plugin
thực hiện các lớp kiểm tra mà tên kết thúc bằng CNTT. Ví dụ: UserIT.java.
Sự nhầm lẫn về những gì tích hợp thử nghiệm có nghĩa
Một số người hiểu được "thử nghiệm hội nhập" như một bài kiểm tra liên quan đến việc "hội nhập" với các hệ thống khác mà hiện nay sử dụng hệ thống. Loại xét nghiệm này chỉ có thể được thực hiện trong một môi trường nơi bạn có tất cả các hệ thống này để tham dự.
Đây có thể chỉ là vấn đề đặt tên, nhưng chúng tôi thiếu kiểm tra (những gì tôi hiểu là kiểm tra tích hợp) cảm thấy sự cần thiết của các mục được mô tả ở trên. Ngược lại, chúng tôi đang nhảy cho một định nghĩa của các bài kiểm tra đơn vị (chỉ lớp thử nghiệm) cho một bài kiểm tra tích hợp (toàn bộ hệ thống thực). Những gì là ở giữa nếu không phải là các bài kiểm tra tích hợp?
Vì vậy, chúng được thực hiện ở cấp độ ui? sử dụng selenium nói, hoặc là có một bộ thử nghiệm bằng văn bản, tương tự như bộ thử nghiệm đơn vị nhưng chỉ rộng hơn trong phạm vi? –
Không nhất thiết. Hãy nghĩ về PaymentService bằng tài nguyên bên ngoài, chẳng hạn như cơ sở dữ liệu hoặc API của bên thứ ba. Có thể mất vài giây để truy cập (vào một ngày tồi tệ) hoặc nó có thể chỉ là một quy trình chạy dài. Nó quá chậm để kiểm tra đơn vị (do đó chế nhạo nó ra), nhưng bạn vẫn muốn thử nghiệm nó để đảm bảo nó hoạt động đúng. Đó là nơi thử nghiệm tích hợp đi vào. Họ không phải là kiểm tra bạn chạy nhiều lần, thường là trước khi thực hiện một bản phát hành hoặc bạn có CI của bạn chạy chúng. – firelore