Lý do chính từ nhà phát triển vì không có thử nghiệm đơn vị tốt là "Mã không được thiết kế theo kiểu thử nghiệm đơn vị". Tôi đang cố gắng hiểu loại thiết kế và mã nào không thể được thử nghiệm.
Lý do chính từ nhà phát triển vì không có thử nghiệm đơn vị tốt là "Mã không được thiết kế theo kiểu thử nghiệm đơn vị". Tôi đang cố gắng hiểu loại thiết kế và mã nào không thể được thử nghiệm.
Câu trả lời:
Một số yếu tố có thể khiến mã khó kiểm tra đơn vị. Khi đây là trường hợp, tái cấu trúc giúp cải thiện mã để có thể kiểm tra được.
Một số ví dụ về mã có thể khó kiểm tra:
function pGetDp_U(int i, int i2, string sText)
.Lưu ý rằng việc thiếu kiến trúc rõ ràng không khiến mã khó kiểm tra đơn vị, vì các kiểm thử đơn vị liên quan đến các phần nhỏ của mã. Kiến trúc không rõ ràng vẫn sẽ có tác động tiêu cực đến tích hợp và thử nghiệm hệ thống.
Có rất nhiều điều làm cho mã khó kiểm tra đơn vị. Thật trùng hợp, rất nhiều trong số đó cũng xảy ra khiến mã khó bảo trì:
Các ví dụ phổ biến về mã người không muốn kiểm tra đơn vị:
Sử dụng một khung giả, tất cả các ví dụ này có thể được kiểm tra đơn vị. Nó chỉ hoạt động để thiết lập các thay thế giả cho các phụ thuộc nội bộ.
Những thứ thực sự không thể được kiểm tra đơn vị:
Đây là một vài lĩnh vực có thể làm cho việc viết bài kiểm tra đơn vị trở nên khó khăn hơn. Tuy nhiên, tôi sẽ nhấn mạnh rằng điều đó không có nghĩa là bạn nên giảm giá các kỹ thuật hữu ích vì chúng có thể làm tăng thêm sự phức tạp cho thử nghiệm của bạn. Như với bất kỳ mã hóa nào, bạn nên thực hiện phân tích của riêng mình để xác định xem lợi ích có vượt quá chi phí hay không, và không chấp nhận một cách mù quáng những gì một số người ngẫu nhiên đăng trên mạng.
Chi phí cho hầu hết các vòng xoắn ngoài tầm kiểm soát trừ khi bạn biết bạn đang làm gì. Thật không may, nhiều người thường không biết cách sử dụng các kỹ thuật này theo cách để giảm thiểu những thứ như kiểm tra độ phức tạp.
Không có thứ gọi là mã không thể kiểm tra được. Tuy nhiên, có một vài ví dụ về mã THỰC SỰ, THỰC SỰ khó kiểm tra (đến mức có thể không đáng để nỗ lực):
Tương tác phần cứng - Nếu mã trực tiếp thao tác phần cứng (ví dụ, ghi vào thanh ghi để di chuyển thiết bị vật lý), thì việc kiểm tra đơn vị có thể quá khó khăn hoặc tốn kém. Nếu bạn sử dụng phần cứng thực sự cho thử nghiệm, điều đó có thể tốn kém để có được phản hồi phù hợp vào khai thác thử nghiệm (còn nhiều thiết bị hơn!) Và nếu bạn không, bạn phải mô phỏng hành vi chính xác của các đối tượng vật lý - không có mẹo nhỏ nào trong Một số trường hợp.
Tương tác đồng hồ - Điều này thường dễ dàng hơn, vì hầu như luôn luôn có thể giả định các chức năng đồng hồ hệ thống khá tầm thường. Nhưng khi bạn không thể, thì các thử nghiệm này trở nên không thể quản lý được - các thử nghiệm dựa trên thời gian thực có xu hướng mất nhiều thời gian để chạy và theo kinh nghiệm của tôi, chúng có xu hướng rất dễ vỡ vì tải hệ thống khiến mọi thứ mất nhiều thời gian hơn , gây ra lỗi thử nghiệm ảo.
Ba nhóm chính của tôi cho việc này là:
mã dựa trên các dịch vụ bên ngoài
các hệ thống không cho phép người kiểm tra sửa đổi trạng thái độc lập với ứng dụng.
kiểm tra môi trường không sao chép thiết lập sản xuất.
Đây là những gì tôi đã trải nghiệm nhiều nhất khi một nhà phát triển biến kỹ sư QA.