3

对于我的单元测试,我使用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?

4

1 回答 1

2

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);
于 2013-07-08T09:16:02.990 回答