2011-09-29 44 views
0

我正在使用如下所述的会话封装。我遇到的问题是,在运行测试时,try不起作用,并进入catch,因此会话变量永远不会被设置。我使用Moq为我的模拟上下文创建一个模拟会话状态。如果我创建一个变量,如:使用最小起订量和会话状态封装进行测试

Session["variable"] = "something"; 

工作正常并且一直持续到测试结束。在我的包装中创建的所有东西都没有。由于会议在某种程度上持续下去,我的理论是,我需要弄清楚它在哪里,然后把它放在我的发现中。但我不知道该怎么做。 public class MySession // private private constructor private 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; } 

回答

2

我觉得你得在你创建会话包装的方式,坚持错误的结束。会话封装通常意味着您创建一个类,在生产代码中,该类将所有调用传递给实际会话。在单元测试中,它没有真正的会话,可能是一个模拟对象。你的MySession类总是需要一个真实的会话,所以使用任何测试都不会是一个真正的单元测试。

你可能不需要自己推出,你可以尝试在System.Web.Abstractions中有一个HttpSessionStateWrapper。

+0

这让我更接近我的目标,因为我没有成功地模拟会话变量,但我想这不是我想要的。我将它标记为答案,因为它使我朝着正确的方向发展,并且我不知道我在问什么。 – jchysk