Tôi hiện đang đặt nền tảng cho một ứng dụng ASP.Net MVC và tôi đang xem xét loại bài kiểm tra đơn vị nào tôi nên chuẩn bị để viết. Tôi đã thấy ở nhiều nơi về cơ bản mọi người nói rằng 'đừng bận tâm kiểm tra quan điểm của bạn, không có logic và nó tầm thường và sẽ được bao phủ bởi một bài kiểm tra tích hợp'.
Tôi không hiểu làm thế nào điều này đã trở thành sự khôn ngoan được chấp nhận. Kiểm tra tích hợp phục vụ một mục đích hoàn toàn khác so với kiểm tra đơn vị. Nếu tôi phá vỡ một cái gì đó, tôi không muốn biết nửa giờ sau khi các bài kiểm tra tích hợp của tôi bị hỏng, tôi muốn biết ngay lập tức.
Kịch bản mẫu: Hãy nói rằng chúng tôi đang xử lý một ứng dụng CRUD tiêu chuẩn với thực thể Khách hàng. Khách hàng có tên và địa chỉ. Ở mỗi cấp độ thử nghiệm, tôi muốn xác minh rằng logic truy xuất của Khách hàng có được cả tên và địa chỉ chính xác.
Để kiểm tra đơn vị kho lưu trữ, tôi viết một bài kiểm tra tích hợp để đánh vào cơ sở dữ liệu. Để kiểm tra đơn vị quy tắc kinh doanh, tôi giả định kho lưu trữ, cung cấp dữ liệu phù hợp cho quy tắc kinh doanh và xác minh kết quả mong đợi của tôi được trả về.
Những gì tôi muốn làm: Để kiểm tra đơn vị UI, tôi giả định các quy tắc kinh doanh, thiết lập trường hợp khách hàng mong đợi của tôi, hiển thị chế độ xem và xác minh rằng chế độ xem có chứa các giá trị phù hợp cho trường hợp tôi đã chỉ định.
Những gì tôi đang mắc kẹt: Để kiểm tra đơn vị kho lưu trữ, tôi viết kiểm tra tích hợp, thiết lập thông tin đăng nhập phù hợp, tạo dữ liệu cần thiết trong cơ sở dữ liệu, mở trình duyệt, điều hướng đến khách hàng và xác minh trang kết quả có chứa trang phù hợp các giá trị cho ví dụ tôi đã chỉ định.
Tôi nhận ra rằng có sự chồng chéo giữa hai kịch bản được thảo luận ở trên, nhưng sự khác biệt chính là thời gian và nỗ lực cần thiết để thiết lập và thực hiện các thử nghiệm.
Nếu tôi (hoặc nhà phát triển khác) xóa trường địa chỉ khỏi chế độ xem, tôi không muốn chờ kiểm tra tích hợp để khám phá điều này. Tôi muốn được phát hiện và gắn cờ trong một bài kiểm tra đơn vị được nhiều lần mỗi ngày.
Tôi có cảm giác rằng tôi chỉ không nắm bắt được một số khái niệm quan trọng. Ai đó có thể giải thích tại sao muốn phản hồi thử nghiệm ngay lập tức về tính hợp lệ của chế độ xem MVC là một điều xấu? (hoặc nếu không tệ, thì đó không phải là cách mong đợi để nhận phản hồi)
"To unit-test the repository, I write an integration test"
Đợi ... cái gì? Đó không phải là một bài kiểm tra đơn vị của kho lưu trữ. Bạn đang tự động kiểm tra cho nó, nhưng mã được kiểm tra vẫn bao gồm DAL và cơ sở dữ liệu. Để kiểm tra đơn vị kho lưu trữ, bạn có cách ly nó giống như bạn có cho các quy tắc kinh doanh của mình.