我正在寫一些單元測試,想知道是否有利於嘲笑Cache
,如果是的話,如何?Mocking System.Web.Caching.Cache - 模擬或檢查null?
目前在我的測試中,我嘲諷了HttpContextBase
和自定義HttpContextFactory
包裹它:
var mockedHttpContextBase = new Mock<HttpContextBase>();
IHttpContextFactory httpContextFactory = new HttpContextFactory
{
Current = mockedHttpContextBase.Object
};
,當我的代碼消耗的IHttpContextFactory
我檢查,如果緩存是用它做任何事情之前空。
var cache = _httpContextFactory.Current.Cache;
Func<SomeReturnType> doSomeWork =() => _foo.someMethodIExecute(param1,param2);
return cache != null ? cache.GetOrStore("doSomeWorkCacheKey",doSomeWork, 900)
: doSomeWork.Invoke();
是否正確,檢查高速緩存每次使用它,或者你也會嘲笑緩存測試,以便它在運行單元測試時不爲空時被空也是這樣嗎?
謝謝吉米。關於第1點,你將如何編寫一個依賴於現有緩存的測試?你如何在這種情況下嘲笑緩存來執行測試? –
@JamieDixon:你不能真正模擬'Cache',因爲它是密封的;您必須使用真正的「Cache」實現對其進行預配置,並在請求時讓您的'HttpContextBase'模擬返回預配置的緩存。我爲我的帖子添加了示例。 –
再次感謝吉米。我感謝你的時間和幫助。我在進行更多搜索後自己添加了一個答案。我似乎使用'HttpRuntime.Cache'更合適,因爲它會實例化它需要的所有東西,因爲如果一切都沒有配置,System.Web.Caching.Cache'會拋出'NullReferenceExeption'。 –