Trong ASP.NET, bạn không thể tạo Test Double của HttpSessionState vì nó là sealed
. Có, đây là thiết kế xấu trên một phần của các nhà thiết kế ban đầu của ASP.NET, nhưng không có nhiều việc phải làm.
Đây là một trong nhiều lý do tại sao TDD'ers và các nhà thực hành SOLID khác phần lớn từ bỏ ASP.NET ủng hộ ASP.NET MVC và các khung công tác có thể kiểm thử khác. Trong ASP.NET MVC, phiên HTTP được mô hình hóa bởi lớp HttpSessionStateBase trừu tượng.
Bạn có thể thực hiện một cách tiếp cận tương tự và cho phép đối tượng của bạn làm việc trên một phiên trừu tượng và sau đó bọc lớp HttpSessionState thực khi bạn đang chạy trong môi trường ASP.NET. Tùy thuộc vào hoàn cảnh, bạn thậm chí có thể tái sử dụng các loại từ System.Web.Abstractions, nhưng nếu không, bạn có thể định nghĩa của riêng bạn.
Trong mọi trường hợp, logic nghiệp vụ của bạn là Mô hình miền và nó phải được mô hình độc lập với bất kỳ công nghệ thời gian chạy cụ thể nào, vì vậy tôi sẽ nói rằng không nên truy cập đối tượng phiên.
Nếu bạn hoàn toàn cần phải sử dụng thử nghiệm đôi cho tets đơn vị liên quan đến HttpSessionState, điều này vẫn còn có thể với một số mocks động xâm lấn, chẳng hạn như TypeMock hay Moles, mặc dù điều này mang nhiều nhược điểm cũng (xem this comparison of dynamic mocks).
Nguồn
2009-12-30 18:15:26
Cũng xem câu trả lời của tôi về vấn đề này - http://stackoverflow.com/a/8487847/232593 –