У меня есть контроллер внутри MVC3, который должен вернуть код ответа 500, если что-то пойдет не так. Я делаю это, возвращая объект вида и устанавливая код ответа http равным 500 (я проверил это в firebug, и все работает отлично).Код ответа на модульный код MVC3
public ActionResult http500()
{
ControllerContext.HttpContext.Response.StatusCode = 500;
ControllerContext.HttpContext.Response.StatusDescription = "An error occurred whilst processing your request.";
return View();
}
Проблема, с которой я столкнулся, заключается в том, что мне нужно написать единичный тест, который проверяет код ответа. Я попытался получить доступ к коду ответа несколькими разными способами как через объект ViewResult, так и контекст Controller.
Ни один из способов не дает мне код ответа, который я установил в контроллере.
[TestMethod()]
public void http500Test()
{
var controller = new ErrorController();
controller.ControllerContext = new ControllerContext(FakeHttpObject(), new RouteData(), controller);
ViewResult actual = controller.http500() as ViewResult;
Assert.AreEqual(controller.ControllerContext.HttpContext.Response.StatusCode, 500);
}
Как бы я мог получить код ответа 500 от контроллера или это скорее интеграционное тестирование.
Мне нравится этот подход, быстрый вопрос, хотя, если действие контроллера возвращает как код состояния, так и представление с моделью, есть ли ощущение гибкий способ имитировать как ответ кода состояния, так и результат представления/модели? Я изо всех сил пытаюсь придумать разумный вариант. – dougajmcdonald
хороший вопрос @dougajmcdonald. вы получили ответ? – richardwhatever