【问题标题】:Unit Testing: Creating a 'mock' request to simulate a MVC page request单元测试:创建一个“模拟”请求来模拟 MVC 页面请求
【发布时间】:2008-11-26 17:45:26
【问题描述】:

如何为我的 asp.net-mvc 应用程序创建模拟请求以进行单元测试?

我有什么选择?

我在我的操作中使用 FormsCollection,所以我也可以模拟表单输入数据。

【问题讨论】:

    标签: asp.net-mvc unit-testing tdd


    【解决方案1】:

    您只需创建一个新的 FormCollection 实例并在其中添加数据。

    所以你可以在不嘲笑任何东西的情况下调用这样的东西。

    var result = controller.Create(new FormCollection { { "InvoiceId", "-1" } }) as RedirectToRouteResult;
    

    否则,如果您的代码调用 Request 或 HttpContext 之类的东西,您可以使用以下扩展方法(灵感来自 Scott Hanselman 的 example)

    我正在使用 RhinoMocks。

    public static HttpContextBase SetHttpContext(this MockRepository mocks, Controller controller, HttpCookieCollection cookies) {
    cookies = cookies ?? new HttpCookieCollection();
    
    var request = mocks.StrictMock<HttpRequestBase>();
    var context = mocks.StrictMock<HttpContextBase>();
    var response = mocks.StrictMock<HttpResponseBase>();
    
    SetupResult.For(context.Request).Return(request);
    SetupResult.For(context.Response).Return(response);
    SetupResult.For(request.Cookies).Return(cookies);
    SetupResult.For(request.IsSecureConnection).Return(false);
    SetupResult.For(response.Cookies).Return(cookies);
    
    if (controller != null)
    {
        controller.ControllerContext = new ControllerContext(context, new RouteData(), controller);
    }
    
    if (!string.IsNullOrEmpty(requestUrl))
    {
        request.SetupRequestUrl(requestUrl);
        SetupResult.For(response.ApplyAppPathModifier(null)).IgnoreArguments().Return(null);
    }
    
    return context;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2010-10-13
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      相关资源
      最近更新 更多