Welcome 微信登录

首页 / 网页编程 / ASP.NET / 如何进行ASP.NET MVC的测试

如何进行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;    }