Estoy escribiendo algunas pruebas de unidad y me pregunto si es ventajoso burlarse del Cache
y, de ser así, ¿cómo?Mocking System.Web.Caching.Cache: ¿simula o comprueba null?
Actualmente en mis pruebas me estoy burlando de la HttpContextBase
y envolviéndolo en una costumbre HttpContextFactory
:
var mockedHttpContextBase = new Mock<HttpContextBase>();
IHttpContextFactory httpContextFactory = new HttpContextFactory
{
Current = mockedHttpContextBase.Object
};
y cuando mi código consume una IHttpContextFactory
puedo comprobar si la caché es nulo antes de hacer nada con él.
var cache = _httpContextFactory.Current.Cache;
Func<SomeReturnType> doSomeWork =() => _foo.someMethodIExecute(param1,param2);
return cache != null ? cache.GetOrStore("doSomeWorkCacheKey",doSomeWork, 900)
: doSomeWork.Invoke();
Es correcto para comprobar por ser nula como esto cada vez que lo uso o le burlarse de la memoria caché también en la prueba de modo que no es nula cuando se ejecutan las pruebas unitarias de la caché?
Gracias Jimmy. Con respecto al punto 1, ¿cómo escribirías una prueba que depende del caché existente? ¿Cómo se burlaría de la caché en este caso para realizar la prueba? –
@JamieDixon: no se puede burlar 'Cache' ya que está sellado; tendrás que preconfigurarlo usando la implementación real de 'Cache' y hacer que tu' HttpContextBase' simule devolver ese caché preconfigurado cuando se solicite. He agregado un ejemplo a mi publicación. –
Gracias de nuevo Jimmy. Aprecio tu tiempo y ayuda. He agregado una respuesta después de hacer más búsquedas. Parece que usar 'HttpRuntime.Cache' es más apropiado ya que creará una instancia de todo lo que necesita para trabajar, ya que' System.Web.Caching.Cache' arrojará 'NullReferenceExeption' si todo no está configurado. –