Tôi đang viết một số bài kiểm tra đơn vị và tự hỏi liệu nó có thuận lợi để giả lập Cache
và nếu có, làm thế nào?Mocking System.Web.Caching.Cache - Mock hoặc kiểm tra null?
Hiện nay trong các thử nghiệm của tôi, tôi đang chế giễu ra HttpContextBase
và gói nó trong một tùy chỉnh HttpContextFactory
:
var mockedHttpContextBase = new Mock<HttpContextBase>();
IHttpContextFactory httpContextFactory = new HttpContextFactory
{
Current = mockedHttpContextBase.Object
};
và khi mã của tôi tiêu thụ một IHttpContextFactory
tôi kiểm tra xem bộ nhớ cache là null trước khi làm bất cứ điều gì với nó.
var cache = _httpContextFactory.Current.Cache;
Func<SomeReturnType> doSomeWork =() => _foo.someMethodIExecute(param1,param2);
return cache != null ? cache.GetOrStore("doSomeWorkCacheKey",doSomeWork, 900)
: doSomeWork.Invoke();
Có quyền kiểm tra bộ nhớ cache bị rỗng như thế này mỗi khi tôi sử dụng hoặc thử giả lập bộ nhớ cache trong thử nghiệm sao cho nó không rỗng khi chạy thử nghiệm đơn vị của bạn?
Cảm ơn Jimmy. Đối với điểm 1, làm thế nào bạn sẽ viết một bài kiểm tra mà phụ thuộc vào bộ nhớ cache tồn tại? Làm thế nào bạn sẽ giả bộ nhớ cache trong trường hợp này để thực hiện thử nghiệm? –
@JamieDixon: bạn có thể không thực sự giả lập 'Cache' vì nó được niêm phong; bạn sẽ phải cấu hình trước nó bằng cách sử dụng thực hiện 'Cache' thực và làm cho' HttpContextBase' của bạn trở lại chế độ cache đã cấu hình sẵn khi được yêu cầu. Tôi đã thêm ví dụ vào bài đăng của mình. –
Cảm ơn Jimmy lần nữa. Tôi đánh giá cao thời gian và sự giúp đỡ của bạn. Tôi đã tự thêm câu trả lời sau khi tìm kiếm thêm. Tôi dường như sử dụng 'HttpRuntime.Cache' là thích hợp hơn vì nó sẽ khởi tạo mọi thứ cần thiết để làm việc khi' System.Web.Caching.Cache' sẽ ném 'NullReferenceExeption' nếu mọi thứ không được cấu hình. –