在测试期间,控制器无法设置会话变量

时间:2015-11-06 16:33:54

标签: asp.net-mvc unit-testing

我正在使用MvcContrib.TestHelper:

[TestMethod]
public void LogOut() {

    // Arrange

    var controller = new AdminController(new AdminLogics(new AdminRepositoryStub()));
    var builder = new TestControllerBuilder();
    builder.InitializeController(controller);

    controller.Session["AdminIsLoggedIn"] = true;

    // Act

    var result = (RedirectToRouteResult)controller.LogOut();

    // Assert

    Assert.IsFalse((bool)controller.Session["AdminIsLoggedIn"]);
}

然而断言失败,因为会话var没有被覆盖。

这里的控制器:

public ActionResult LogOut() {
    Session["AdminIsLoggedIn"] = false;

    return RedirectToAction("List", "Catalogue");
}

1 个答案:

答案 0 :(得分:1)

只有在HttpContext的上下文中运行时才能访问会话变量。您的测试方法未在HttpContext下运行。这将很难测试,但也许这篇文章可以帮助你。

http://haacked.com/archive/2005/06/11/simulating_httpcontext.aspx