Sto scrivendo qualche test unitario e mi chiedo se sia vantaggioso deridere lo Cache
e se sì, come?Mocking System.Web.Caching.Cache - Mock o controlla null?
Attualmente nel mio test ho beffarda la HttpContextBase
e avvolgendolo in un costume HttpContextFactory
:
var mockedHttpContextBase = new Mock<HttpContextBase>();
IHttpContextFactory httpContextFactory = new HttpContextFactory
{
Current = mockedHttpContextBase.Object
};
e quando il mio codice consuma in IHttpContextFactory
ho verificare se la cache è nullo prima di fare qualsiasi cosa con esso.
var cache = _httpContextFactory.Current.Cache;
Func<SomeReturnType> doSomeWork =() => _foo.someMethodIExecute(param1,param2);
return cache != null ? cache.GetOrStore("doSomeWorkCacheKey",doSomeWork, 900)
: doSomeWork.Invoke();
è giusto per verificare la cache essere nulla come questo ogni volta che lo uso o si deridere la cache anche nel test in modo che non è nulla quando si esegue il test di unità?
Grazie Jimmy. Per quanto riguarda il punto 1, come scriveresti un test che dipende dalla cache esistente? Come deriderei la cache in questo caso per eseguire il test? –
@JamieDixon: non si può realmente prendere in giro 'Cache' dato che è sigillato; dovrai preconfigurarlo usando un'implementazione reale di 'Cache' e rendere il tuo simulatore' HttpContextBase' restituire quella cache preconfigurata quando richiesto. Ho aggiunto un esempio al mio post. –
Grazie ancora Jimmy. Apprezzo il tuo tempo e il tuo aiuto. Ho aggiunto una risposta io stesso dopo aver fatto più ricerche. Sembra che l'uso di 'HttpRuntime.Cache' sia più appropriato dato che istanzia tutto ciò di cui ha bisogno per funzionare dove' System.Web.Caching.Cache' genererà 'NullReferenceExeption' se tutto non è configurato. –