asp.net-mvc - 在 MVC 3 中模拟 session

标签 asp.net-mvc unit-testing mocking moq

我正在尝试使用 Moq 模拟 Controller 的 session 变量。我一直遇到的问题是, session 在测试中是可见的,但在实际 Controller 中为空。

测试代码:

[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
}

Controller 代码:

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

上面的代码遵循我见过的最常见的模式(几个 SO 帖子、Action Ch. 7 示例中的 MVC 2 等),但仍然不起作用。在 Controller 内部,ControllerContext 为 null,HttpContext 也为 null。我做错了什么?

最佳答案

这一定是由于将单元测试项目添加到已经存在的项目而引起的配置问题,因为我刚刚创建了一个新的 MVC 3 项目,选中了“创建单元测试项目”,添加了我的所有 Controller 、模型等等从旧项目到新项目,并且运行得很好。

关于asp.net-mvc - 在 MVC 3 中模拟 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5174400/

相关文章:

python - Selenium/Python - 如何模拟服务器响应?

c# - moq objects Returns 方法,应该返回一个空对象

java - 如何使用 mockMvc 检查响应正文中的字符串

html - visibility : visible not working

asp.net-mvc - 错误: «Could not load type MvcApplication»

asp.net-mvc - DefaultControllerFactory 与 IDependencyResolver

c# - 模拟复杂的第 3 方库

asp.net-mvc - 为 ASP.NET MVC 站点推荐的博客引擎

unit-testing - 在save()上的Grails 2.4.4 Controller 测试返回空模型

unit-testing - 使用 ServiceLocator 进行单元测试