首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC Controller 單元測試指南:使用 Rhino Mocks 模擬 HttpContext

     編輯:關於ASP.NET

問題

測試專案中 new Controller() 時,HttpContext 為 null,導致 Session、Cookie、Form 等皆不可用。

解決方案:MvcMockHelpers 封裝 Rhino Mocks

public static class MvcMockHelpers 
{
    public static HttpContextBase FakeHttpContext(this MockRepository mocks) 
    {
        var context = mocks.PartialMock<HttpContextBase>();
        var request = mocks.PartialMock<HttpRequestBase>();
        var response = mocks.PartialMock<HttpResponseBase>();
        var session = mocks.PartialMock<HttpSessionStateBase>();
        var 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) 
    {
        var context = FakeHttpContext(mocks);
        context.Request.SetupRequestUrl(url);
        return context;
    }

    public static void SetFakeControllerContext(this MockRepository mocks, Controller controller) 
    {
        var httpContext = mocks.FakeHttpContext();
        var controllerContext = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
        controller.ControllerContext = controllerContext;
    }
}

使用範例

[TestMethod]
public void Test_Controller_Action() 
{
    var mocks = new MockRepository();
    var controller = new HomeController();
    mocks.SetFakeControllerContext(controller);
    // 接著測試 Action...
}

此輔助類別完整模擬 HttpContextBase 及其子物件,讓 Controller 測試不再受限於 Web 環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved