Ở mức độ nào bạn đơn vị kiểm tra các thành phần nội bộ / riêng tư của một lớp / mô-đun / gói / vv? Bạn có kiểm tra chúng không hay bạn chỉ kiểm tra giao diện với thế giới bên ngoài? Một ví dụ về những nội bộ này là phương thức riêng tư.
Ví dụ, hãy tưởng tượng một trình phân tích cú pháp gốc đệ quy , có một số thủ tục nội bộ (hàm / phương thức) được gọi từ một thủ tục trung tâm. Giao diện duy nhất với thế giới bên ngoài là thủ tục trung tâm, lấy một chuỗi và trả về thông tin được phân tích cú pháp. Các thủ tục khác phân tích các phần khác nhau của chuỗi và chúng được gọi từ thủ tục trung tâm hoặc các thủ tục khác.
Đương nhiên, bạn nên kiểm tra giao diện bên ngoài bằng cách gọi nó bằng các chuỗi mẫu và so sánh nó với đầu ra được phân tích cú pháp. Nhưng những gì về các thủ tục khác? Bạn có kiểm tra chúng riêng lẻ để kiểm tra xem chúng phân tích chính xác các chuỗi con của chúng không?
Tôi có thể nghĩ về một vài lập luận:
Ưu điểm :
- Thử nghiệm nhiều hơn luôn luôn tốt hơn và điều này có thể giúp tăng phạm vi bảo hiểm mã
- Một số thành phần bên trong có thể khó đưa ra đầu vào cụ thể (ví dụ trường hợp cạnh) bằng cách cung cấp đầu vào cho giao diện bên ngoài
- Kiểm tra rõ ràng hơn. Nếu một thành phần bên trong có lỗi (đã sửa), trường hợp kiểm tra cho thành phần đó cho thấy rõ lỗi đó nằm trong thành phần cụ thể đó
Nhược điểm :
- Tái cấu trúc trở nên quá đau đớn và tốn thời gian. Để thay đổi bất cứ điều gì, bạn cần viết lại các bài kiểm tra đơn vị, ngay cả khi người dùng giao diện bên ngoài không bị ảnh hưởng
- Một số ngôn ngữ và khung kiểm tra không cho phép nó
Ý kiến của bạn là gì?