Sim*_*mon 3 unit-testing moq asp.net-mvc-3
我用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);
}
Run Code Online (Sandbox Code Playgroud)
我的单元测试:
[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......;
}
Run Code Online (Sandbox Code Playgroud)
我的单元测试导致NullReferenceException:

我也尝试MvcContrib.TestHelper了失败的Session.SessionID消息"尚未实现".
如何使用单元测试来测试我的Action?
您的模拟设置不完整.
你需要设置ControllerContextc.HttpContext以返回你的mockHttpContext,你还需要使用你contextMock的StartController设置其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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |