尝试运行单元测试时,HttpContextBaseExtensions.GetOwinContext抛出NullReferenceException

时间:2014-03-25 12:21:35

标签: c# asp.net-mvc unit-testing asp.net-mvc-4

在尝试为ASP.NET MVC框架编写的程序运行单元测试时,我得到一个NullReferenceException。

  

测试失败。 System.NullReferenceException:不是对象引用   设置为对象的实例。在   System.Web.HttpContextBaseExtensions.GetOwinContext(HttpContextBase   上下文中)

当我尝试执行Logoff方法时会发生此错误。

public ActionResult LogOff()
{
     SessionWrapper.SetInSession("_Settings", null);  
     AuthenticationManager.SignOut();
     return RedirectToAction("Index", "Home");
}

public class HttpContextSessionWrapper : ISessionWrapper
{
        public T GetFromSession<T>(string key)
        {
            if (!string.IsNullOrEmpty(key))
                return (T)HttpContext.Current.Session[key];
            else    
                return default(T);
        }

        public void SetInSession(string key, object value)
        {
            if (!string.IsNullOrEmpty(key))
                HttpContext.Current.Session[key] = value;
        }
}

在ASP.NET MVC中编写单元测试时如何修复此NullReferenceException?

1 个答案:

答案 0 :(得分:1)

您不应该使用HttpContext.Context。使用this.Session,这是您的控制者。您可以使用IoC注入它或将其传递给您的方法。

使用IoC,您也可以更轻松地模拟这种依赖。