单元测试:创建一个“模拟”的要求,以模拟一个MVC页面请求 [英] Unit Testing: Creating a 'mock' request to simulate a MVC page request

查看:190
本文介绍了单元测试:创建一个“模拟”的要求,以模拟一个MVC页面请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何去创造对单元测试我的asp.net-MVC应用程序的模拟请求?

How do I go about creating a mock request for my asp.net-mvc application for unit-testing?

我有什么选择呢?

我在我的操作使用FormsCollection这样我就可以模拟形式的输入数据也。

I am using FormsCollection in my Actions so I can simulate form input data also.

推荐答案

您只需要创建的FormCollection的新实例,并添加它里面的数据。

You just have to create a new instance of FormCollection and add the data inside of it.

所以,你可以调用这样的事情没有任何嘲讽

So you can call something like this without mocking anything.

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

否则,如果你的code调用类似请求或HttpContext的,你可以使用下面的扩展方法(斯科特Hanselman的的例如

我使用RhinoMocks的。

I am using 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;
}

这篇关于单元测试:创建一个“模拟”的要求,以模拟一个MVC页面请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆