对于我的单元测试,我使用Microsoft.VisualStudio.TestTools.UnitTesting
和MvcContrib.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()
- 操作时,它会显示会话ID。当我通过单元测试调用操作时,lReturn
为"false"
而不是预期的会话ID。
如何在单元测试中获取Session.SessionID?
答案 0 :(得分:2)
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);