用Moq来嘲笑ASP.NET MVC


这是我的小例子,关于如何使用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的其他成员。