我使用 MVC3 并想通过 Microsoft.VisualStudio.TestTools.UnitTesting
和 Moq
测试以下操作:
public ActionResult index()
{
Session.Add("username", "Simon");
var lName = Session["username"] as String;
var lSessionID = Session.SessionID;
return Content(lSessionID);
}
我的单元测试:
[TestMethod]
public void IndexTest()
{
// Arrange
var contextMock = new Mock<ControllerContext>();
var mockHttpContext = new Mock<HttpContextBase>();
var session = new Mock<HttpSessionStateBase>();
mockHttpContext.Setup(ctx => ctx.Session).Returns(session.Object);
StartController controller = new StartController();
var lResult = controller.index() as ContentResult;
Assert......;
}
我的单元测试导致 NullReferenceException:
我也尝试过 MvcContrib.TestHelper
失败的 Session.SessionID
消息“尚未实现”。
如何使用单元测试来测试我的 Action?
最佳答案
您的模拟设置不完整。
您需要设置 ControllerContextc.HttpContext
以返回您的 mockHttpContext
并且您还需要在您的 StartController 中使用您的
设置它的 contextMock
ControllerContext
属性:
所以下面的设置应该可以工作:
var contextMock = new Mock<ControllerContext>();
var mockHttpContext = new Mock<HttpContextBase>();
var session = new Mock<HttpSessionStateBase>();
mockHttpContext.Setup(ctx => ctx.Session).Returns(session.Object);
contextMock.Setup(ctx => ctx.HttpContext).Returns(mockHttpContext.Object);
StartController controller = new StartController();
controller.ControllerContext = contextMock.Object;
关于asp.net-mvc-3 - 单元测试因 Sessions 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17542464/