Я относительно новичок в тестировании и MVC и сегодня столкнулся с камнем преткновения. Я пытаюсь протестировать метод действия, который зависит от HttpContext.Current.Cache, и хотел бы узнать, как лучше всего добиться «низкой связи», чтобы можно было легко тестировать. Вот что у меня так далеко ...
public class CacheHandler : ICacheHandler
{
public IList<Section3ListItem> StateList
{
get { return (List<Section3ListItem>)HttpContext.Current.Cache["StateList"]; }
set { HttpContext.Current.Cache["StateList"] = value; }
}
...
Затем я получаю к нему доступ таким образом ... Я использую Castle для своего IoC.
public class ProfileController : ControllerBase
{
private readonly ISection3Repository _repository;
private readonly ICacheHandler _cache;
public ProfileController(ISection3Repository repository, ICacheHandler cacheHandler)
{
_repository = repository;
_cache = cacheHandler;
}
[UserIdFilter]
public ActionResult PersonalInfo(Guid userId)
{
if (_cache.StateList == null)
_cache.StateList = _repository.GetLookupValues((int)ELookupKey.States).ToList();
...
Тогда в моих модульных тестах я могу смоделировать ICacheHandler.
Будет ли это считаться «лучшей практикой», и есть ли у кого-нибудь какие-либо предложения относительно других подходов?