gpt4 book ai didi

c# - 如何在单元测试中从我的 MVC 框架中获取 Session.SessionID?

转载 作者:行者123 更新时间:2023-11-30 17:04:22 25 4
gpt4 key购买 nike

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

我在 Controller 中的 Action :

    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() 操作时,它会显示 Session-ID。当我通过单元测试调用操作时,lReturn"false" 而不是预期的 session ID。

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

最佳答案

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

在单元测试中,您可以使用设置 ControllerContext 对象。 (或使用任何模拟供应商,如最小起订量)。 我没有测试代码

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);

关于c# - 如何在单元测试中从我的 MVC 框架中获取 Session.SessionID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com