繁体   English   中英

如何在单元测试中从我的MVC-Framework获取Session.SessionID?

[英]How can I get Session.SessionID from my MVC-Framework in unit tests?

对于我的单元测试,我使用Microsoft.VisualStudio.TestTools.UnitTestingMvcContrib.TestHelper

我在控制器中的动作:

    public ActionResult index()
    {
        try
        {
            Session.Add("username", "Simon");
            var lSessionID = Session.SessionID;

            return Content(lSessionID);
        }
        catch 
        { 

        }

        return Content("false");
    }

我的单元测试:

[TestMethod]
public void IndexTestMethod1()
{

    TestControllerBuilder builder = new TestControllerBuilder();

    StartController controller = new StartController();

    builder.InitializeController(controller);

    var lResult = controller.index();

    var lReturn = ((System.Web.Mvc.ContentResult)(lResult)).Content; // returns "false"

    Assert.IsFalse(lReturn == "false");
}

当我在浏览器中调用index() -action时,它会显示Session-ID。 当我通过单元测试调用操作时, lReturn"false"而不是预期的Session-ID。

如何在单元测试中获取Session.SessionID?

Session变量从ControllerContext.HttpContext.Session读取,Session的类型为HttpSessionStateBase。

在单元测试中,您可以使用设置ControllerContext对象。 (或使用像moq这样的模拟提供商)。 我没有测试过代码

var contextMock = new Mock<ControllerContext>();
var mockHttpContext = new Mock<HttpContextBase>();
var session = new Mock<HttpSessionStateBase>();
mockHttpContext.Setup(h => h.Session).Returns(session.Object);
contextMock.Setup(c => c.HttpContext).Returns(mockHttpContext.Object);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM