这是我的小例子,关于如何使用Moq嘲笑HttpContextBase它的成员让控制器测试通过。当您不被允许使用开源或自己承担风险的软件时,您可以使用这些代码,这些软件使用内置功能为您提供这种初始化。这也是一个很好的练习,它向你介绍了如何解决嘲弄的问题。
这里有一个简单的例子。
var controller = new MyController(); var server = new Mock<HttpServerUtilityBase>(MockBehavior.Loose); var response = new Mock<HttpResponseBase>(MockBehavior.Strict); var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.Setup(r => r.UserHostAddress).Returns("127.0.0.1"); var session = new Mock<HttpSessionStateBase>(); session.Setup(s => s.SessionID).Returns(Guid.NewGuid().ToString()); var context = new Mock<HttpContextBase>(); context.SetupGet(c => c.Request).Returns(request.Object); context.SetupGet(c => c.Response).Returns(response.Object); context.SetupGet(c => c.Server).Returns(server.Object); context.SetupGet(c => c.Session).Returns(session.Object); controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
同样,您也可以模仿HttpContextBase的其他成员。