如何进行ASP.NET MVC的测试2011-12-13 博客园 王德水本文参考了http://stephenwalther.com/blog/的内容。今天需要对ASP.NET MVC的Controller进行测试,我们都知道当我们在测试工程里new一个controller时,这个controller里的httpcontext是空的,也就是session,cookie, form等都是空。方法一:Mock controller的HttpContext, 暂时失败那么我们如何对controller进行测试呢,我首先想到的是mock一个httpcontext,这里我用的是Rhino Mocks
public static class MvcMockHelpers { public static HttpContextBase FakeHttpContext(this MockRepository mocks) { HttpContextBase context = mocks.PartialMock<HttpContextBase>(); HttpRequestBase request = mocks.PartialMock<HttpRequestBase>(); HttpResponseBase response = mocks.PartialMock<HttpResponseBase>(); HttpSessionStateBase session = mocks.PartialMock<HttpSessionStateBase>(); HttpServerUtilityBase server = mocks.PartialMock<HttpServerUtilityBase>(); SetupResult.For(context.Request).Return(request); SetupResult.For(context.Response).Return(response); SetupResult.For(context.Session).Return(session); SetupResult.For(context.Server).Return(server); mocks.Replay(context); return context; } public static HttpContextBase FakeHttpContext(this MockRepository mocks, string url) { HttpContextBase context = FakeHttpContext(mocks); context.Request.SetupRequestUrl(url); return context; } public static void SetFakeControllerContext(this MockRepository mocks, Controller controller) { var httpContext = mocks.FakeHttpContext(); ControllerContext context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller); controller.ControllerContext = context; }