2014-03-25 142 views
0

當嘗試爲在ASP.NET MVC框架中編寫的程序運行單元測試時,出現NullReferenceException異常。HttpContextBaseExtensions.GetOwinContext在嘗試運行時拋出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

你原來的問題太寬泛了。我編輯它,所以它不會被關閉。這個問題是正確的範圍,但我們仍然需要一些信息:你如何嘲笑HttpContextBase?如果你不嘲笑外部類,它們將是空的,你將得到一個NRE。你需要閱讀像Rhino Mocks這樣的模擬框架。 –

+0

@GeorgeStocker謝謝! –

回答

1

您不應該使用HttpContext.Context。使用this.Session,這是你的控制器。你可以用IoC注入,或者將它傳遞給你的方法。

使用IoC,您也可以更容易地嘲笑這種依賴性。

+0

那麼..謝謝你輸入第一個解決方案關於'this.Session'不工作...我會嘗試IoC ... –

+0

@Dimi任何代碼爲此工作? – Jerome2606

相關問題