Chúng tôi đang sử dụng StructMap trong một dự án phát triển phần mềm mới. Một trong các thành viên trong nhóm đã thực hiện một bài kiểm tra đơn vị về cơ bản kiểm tra cấu hình bộ chứa StructMap. Nó làm điều này bằng cách làm như sau;
- Đếm số lượng phiên bản của các cụm được cấu hình cho các lớp trong không gian tên ứng dụng của chúng tôi.
- Xác định các trường hợp dự kiến ở cấp lớp
- Xác nhận rằng các trường hợp dự kiến phù hợp với tổng số trường hợp tìm thấy.
- Các xác nhận rằng các trường hợp dự kiến khớp với các trường hợp được xác định trong thử nghiệm
Một ví dụ về điều này là;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
Chúng tôi cũng có 'bài kiểm tra đơn vị' cho lớp sau;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
Trong các thử nghiệm này, chúng tôi giả định IEn Môi trường lưu trữ, do đó sẽ không tiêm nó từ container như trong hệ thống trực tiếp.
Một đồng nghiệp đã bỏ qua kiểm tra đơn vị trên cấu hình structuremap với một nhận xét dọc theo dòng "Kiểm tra đơn vị chỉ kiểm tra cấu hình của chính nó". Đây rõ ràng là mục đích của bài kiểm tra và theo tôi là hoàn toàn hợp lệ. Tôi đã yêu cầu anh chàng bỏ qua bài kiểm tra để loại bỏ cấu hình structuremap cho IEnvironmentRepository
(với bài kiểm tra vẫn bị bỏ qua) và chạy bộ kiểm tra đơn vị đầy đủ, tất cả đều vượt qua. Sau đó chúng tôi đã chạy ứng dụng và nó bị đổ vì cấu hình container hiện không hợp lệ. Theo tôi, điều này đã chứng minh giá trị của bài kiểm tra, đồng nghiệp của tôi vẫn không đồng ý. Ông chỉ đơn giản tuyên bố rằng chúng ta không nên kiểm tra cấu hình, nhưng tôi cho rằng điều này sẽ tốt trong bài kiểm tra đơn vị.
Vì vậy, một số câu hỏi;
- Đây có phải là thử nghiệm đơn vị hợp lệ không - Chúng tôi đang kiểm tra cấu hình của bộ chứa của chúng tôi, không phải là structuremap hoạt động (nhưng tôi có thể thấy sự chồng chéo)
- Nếu không, làm thế nào bạn có thể xác nhận cấu hình mà không cần kiểm tra nó. Làm thế nào bạn có thể ngăn ai đó vô tình xóa một dòng mã cần thiết và kiểm tra nó?
MyClass
Kiểm tra đơn vị có nên giải quyết trường hợpIEnvironmentRepository
từ container và vượt qua điều này không?