Unit Testing: Creating a 'mock' request to simulate a MVC page request

天大地大妈咪最大 提交于 2019-12-03 22:02:20
labilbe

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;

Otherwise if your code calls something like Request or HttpContext you can use the following extension method (inspired from Scott Hanselman's example)

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;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!