2011-03-02 43 views
3

惩戒会话我试图用起订量来模拟控制器的会话变量。我继续运行到的是,该会议是从测试可见,但空的实际控制人内。在MVC 3

测试代码:

[TestMethod] 
public void SessionTest() 
{ 
    var controller = new BaseController(); 
    var controllerContext = new Mock<ControllerContext>(); 
    controllerContext.Setup(cc => cc.HttpContext.Session["user"]).Returns(new User()); 
    controller.ControllerContext = controllerContext.Object; 

    User currentUser = controller.CurrentUser; //fails (throws NullReferenceException) 
    User currentUser = (User)controller.Session["test"]; //works 
} 

控制器代码:

public User CurrentUser 
{ 
    get 
    { 
     return (User)Session["user"]; //HttpContext is null at this point 
    } 
} 

上面的代码如下我看到的最常见的模式(几个SO贴子,所述MVC 2在行动7章示例等),但仍然不起作用。控制器内部,ControllerContext空,因为是HttpContext的。我究竟做错了什么?

+0

我刚刚创建了简单的解决方案重复你的问题,我不能复制。你正在使用什么版本的Moq? – Restuta 2011-03-02 22:50:44

+0

我使用v4.0.10827.0。 – 2011-03-03 13:17:27

回答

1

那一定是因添加一个单元测试项目到一个已经存在的项目配置问题,因为我刚刚创建了一个新的MVC 3的项目,选中“创建单元测试项目”,添加了所有我的控制器,模型等从旧项目到新项目,而且工作得很好。