Модульное тестирование: создание «ложного» запроса для имитации запроса страницы MVC - PullRequest
2 голосов
/ 26 ноября 2008

Как мне создать фиктивный запрос для моего приложения asp.net-mvc для модульного тестирования?

Какие варианты у меня есть?

Я использую FormsCollection в своих действиях, чтобы я также мог имитировать входные данные формы.

1 Ответ

4 голосов
/ 26 ноября 2008

Вам просто нужно создать новый экземпляр FormCollection и добавить в него данные.

Так что вы можете называть что-то подобное, не издеваясь.

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

В противном случае, если ваш код вызывает что-то вроде Request или HttpContext, вы можете использовать следующий метод расширения (вдохновленный примером Скотта Хансельмана )

Я использую 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...