Uh ... có những điểm tốt về kiểm tra đơn vị và tích hợp được viết trong những câu trả lời ở đây!
Tôi bỏ lỡ các quan điểm liên quan đến chi phí và thực tế ở đây. Điều đó nói rằng tôi thấy rõ lợi ích của các thử nghiệm đơn vị nguyên tử / rất cô lập (có thể độc lập cao với nhau và với tùy chọn chạy song song và không có bất kỳ phụ thuộc nào, như cơ sở dữ liệu, hệ thống tệp, v.v.) và thử nghiệm tích hợp (cấp cao hơn), nhưng ... đó cũng là vấn đề về chi phí (thời gian, tiền bạc, ...) và rủi ro .
Vì vậy, có những yếu tố khác, quan trọng hơn nhiều (như "phải kiểm tra cái gì" ) trước khi bạn nghĩ đến "cách kiểm tra" từ kinh nghiệm của tôi ...
Có phải khách hàng của tôi (ngầm) trả tiền cho số lượng viết thêm và duy trì các bài kiểm tra? Là một cách tiếp cận dựa trên thử nghiệm (viết thử nghiệm trước khi bạn viết mã) có thực sự hiệu quả về chi phí trong môi trường của tôi (phân tích rủi ro thất bại / phân tích chi phí, con người, thông số thiết kế, thiết lập môi trường thử nghiệm) không? Mã luôn có lỗi, nhưng nó có thể hiệu quả hơn về chi phí khi chuyển thử nghiệm sang sử dụng sản xuất (trong trường hợp xấu nhất!)?
Nó cũng phụ thuộc rất nhiều vào chất lượng mã (tiêu chuẩn) của bạn là gì hoặc các khung, IDE, nguyên tắc thiết kế, v.v. bạn và nhóm của bạn tuân theo và họ có kinh nghiệm như thế nào. Một mã được viết tốt, dễ hiểu, đủ tài liệu (lý tưởng là tự viết tài liệu), mô-đun, ... mã giới thiệu có khả năng ít lỗi hơn so với ngược lại. Vì vậy, "nhu cầu" thực sự, áp lực hoặc chi phí bảo trì / rủi ro tổng thể / rủi ro cho các thử nghiệm mở rộng có thể không cao.
Chúng ta hãy đưa nó đến mức cực đoan mà một đồng nghiệp trong nhóm của tôi đề xuất, chúng ta phải thử kiểm tra mã lớp mô hình Java EE thuần túy của chúng tôi với độ bao phủ 100% mong muốn cho tất cả các lớp trong và chế tạo cơ sở dữ liệu. Hoặc người quản lý muốn các thử nghiệm tích hợp được bao phủ với 100% tất cả các trường hợp sử dụng trong thế giới thực và quy trình làm việc trên web vì chúng tôi không muốn rủi ro cho bất kỳ trường hợp sử dụng nào thất bại. Nhưng chúng tôi có ngân sách eo hẹp khoảng 1 triệu euro, một kế hoạch khá chặt chẽ để mã hóa mọi thứ. Một môi trường khách hàng, nơi các lỗi ứng dụng tiềm năng sẽ không gây nguy hiểm lớn cho con người hoặc các công ty. Ứng dụng của chúng tôi sẽ được thử nghiệm nội bộ với (một số) thử nghiệm đơn vị quan trọng, thử nghiệm tích hợp, thử nghiệm khách hàng quan trọng với kế hoạch thử nghiệm được thiết kế, giai đoạn thử nghiệm, v.v. Chúng tôi không phát triển ứng dụng cho một số nhà máy hạt nhân hoặc sản xuất dược phẩm!
Bản thân tôi cố gắng viết bài kiểm tra nếu có thể và phát triển trong khi đơn vị kiểm tra mã của tôi. Nhưng tôi thường làm điều đó từ cách tiếp cận từ trên xuống (thử nghiệm tích hợp) và cố gắng tìm ra điểm tốt, nơi thực hiện "cắt lớp ứng dụng" cho các thử nghiệm quan trọng (thường là trong lớp mô hình). (bởi vì nó thường rất nhiều về các "lớp")
Hơn nữa, mã kiểm thử đơn vị và tích hợp không xuất hiện mà không có tác động tiêu cực về thời gian, tiền bạc, bảo trì, mã hóa, v.v ... Thật tuyệt và nên được áp dụng, nhưng hãy cẩn thận và xem xét các tác động khi bắt đầu hoặc sau 5 năm thử nghiệm được phát triển mã.
Vì vậy, tôi muốn nói rằng nó thực sự phụ thuộc rất nhiều vào sự tin tưởng và đánh giá chi phí / rủi ro / lợi ích ... như trong cuộc sống thực, nơi bạn không thể và không muốn chạy xung quanh với nhiều cơ chế an toàn 100%.
Đứa trẻ có thể và nên trèo lên một nơi nào đó và có thể ngã xuống và tự làm đau mình. Chiếc xe có thể ngừng hoạt động vì tôi đổ đầy nhiên liệu sai (đầu vào không hợp lệ :)). Bánh mì nướng có thể bị đốt cháy nếu nút thời gian ngừng hoạt động sau 3 năm. Nhưng tôi không, không bao giờ muốn lái xe trên đường cao tốc và cầm vô lăng tách rời trong tay :)