我正在使用如下所示的Session包装器。我遇到的问题是,当运行测试时,try不起作用,它会进入catch,因此永远不会设置会话变量。我正在使用Moq为我的模拟上下文创建一个模拟会话状态。如果我创建一个变量,如:
Session["variable"] = "something";
工作正常并且持续到测试结束。在我的包装器中创建的所有东西都没有。由于会议以某种方式持续存在,我的理论只是我需要弄清楚它在哪里然后把它放在我的捕获中。我不知道怎么回事。 公共课MySession { //私有构造函数 私人MySession() { id = new Random()。Next(100000); }
// Gets the current session.
public static MySession Current
{
get
{
MySession session = new MySession();
try
{
session =
(MySession)HttpContext.Current.Session["__MySession__"];
}
catch
{
//Catch nothing
}
if (session == null)
{
session = new MySession();
HttpContext.Current.Session["__MySession__"] = session;
}
return session;
}
}
// **** add your session properties here, e.g like this:
public int id { get; set; }
答案 0 :(得分:2)
我觉得你在创建会话包装器的过程中得到了错误的结局。会话包装器通常意味着您创建一个类,该类在生产代码中将所有调用传递给真实会话。在单元测试中,它没有真正的会话,可能是一个模拟对象。您的MySession类总是需要一个真实的会话,因此任何使用的测试都不是真正的单元测试。
你可能不需要自己动手,你可以尝试在System.Web.Abstractions中有一个HttpSessionStateWrapper。