How to simulate HttpContext for unit test in non-web project.

開發Web專案時常會使用到HttpContext物件,例如使用HttpContext.Current取得資料,而有時候我們可能會因為單元測試方便、分工或其他因素,將一些功能寫在別的類別庫專案再進行引用。但是非Web專案使用到HttpContext.Current就會發現他是Null而無法使用,所以我們必須自行模擬建立HttpContext物件:

首先加入參考,於[.NET]的頁籤加入[System.Web];如果找不到的話,先調整專案屬性,於[應用程式]=>[目標Framework]選擇非Client Profile的版本,例如.NET Framework 4

接著加入以下程式碼即可

using System.Web;
using System.Web.SessionState;
using System.Security.Principal;
using System.IO;

// ...

HttpContext.Current = new HttpContext(new HttpRequest("", "http://localhost", ""), new HttpResponse(new StringWriter()));

// 允許使用Session
SessionStateUtility.AddHttpSessionStateToContext(HttpContext.Current, new HttpSessionStateContainer("", new SessionStateItemCollection(), new HttpStaticObjectsCollection(), 20000, true, HttpCookieMode.UseCookies, SessionStateMode.Off, false));

// 模擬user登入
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity("user"), null);

// 模擬未登入使用者
//HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(""), null);
文章標籤
創作者介紹

小殘的程式光廊

emn178 發表在 痞客邦 PIXNET 留言(0) 人氣()