我在现有应用程序中有一个 SessionManager 类,如下所示:
public class SessionManagerBase<TKey>
{
public static void AddItem(TKey key, object item)
{
_httpContext.Session[key.ToString()] = item;
}
public static T GetItem<T>(TKey key)
{
object item = _httpContext.Session[key.ToString()];
return item == null ? default(T) : (T) Convert.ChangeType(item, typeof (T));
}
// etc...
private static HttpContextBase _httpContext
{
get
{
return new HttpContextWrapper(HttpContext.Current);
}
}
}
在我的 HomeController 中,我有如下代码:
public ActionResult Landing(string id)
{
SessionManager.GetItem<Campaign>(SessionKeys.Campaign)
// commented for brevity
return View("Index");
}
当我对 Landing 方法运行单元测试时,测试失败,因为 HttpContext.Current 为空。我在单元测试中模拟了 Session 对象,如果我尝试直接在 Landing 方法中访问 Session(即 Session["SomeValue"]),它可以工作,但是任何依赖 SessionManager 的代码都会被破坏。
底线是我想要一个可以用来以通用、强类型的方式访问 Session 值的类,但这也可以进行单元测试。有人对我如何修改此代码以实现此目的有任何建议吗?