使用MOQ和会话状态包装器进行测试

时间:2011-09-29 19:56:38

标签: c# session testing moq wrapper

我正在使用如下所示的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; }

1 个答案:

答案 0 :(得分:2)

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

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