Я пишу какой-то единичный тест, и мне интересно, полезно ли издеваться над Cache
, и если да, то как?Mocking System.Web.Caching.Cache - Mock или проверка на 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», если все не настроено. –