Posiadam kontroler w ramach MVC3, który musi zwrócić kod odpowiedzi 500, jeśli coś pójdzie nie tak. Robię to, zwracając obiekt widoku i ustawiając kod odpowiedzi http równy 500 (sprawdziłem to w firebug i wszystko działa świetnie).Kod odpowiedzi jednostki testowej MVC3
public ActionResult http500()
{
ControllerContext.HttpContext.Response.StatusCode = 500;
ControllerContext.HttpContext.Response.StatusDescription = "An error occurred whilst processing your request.";
return View();
}
Problem jaki mam teraz, to móc napisać test jednostkowy, który sprawdza kod odpowiedzi. Próbowałem uzyskać dostęp do kodu odpowiedzi na kilka różnych sposobów, zarówno poprzez obiekt ViewResult, jak i kontekst kontrolera.
W żaden sposób nie otrzymałem kodu odpowiedzi, który ustawiłem w kontrolerze.
[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);
}
W jaki sposób chciałbym uzyskać kod odpowiedzi 500 od kontrolera lub jest to więcej rzeczy do testowania integracji.
Podoba mi się to podejście, ale szybkie pytanie, czy działanie kontrolera zwraca zarówno kod statusu, jak i widok z modelem, czy jest jakiś sens sposób naśladowania zarówno odpowiedzi na kod statusu, jak i wyniku widoku/modelu? Staram się wymyślić rozsądną opcję. – dougajmcdonald
dobre pytanie @ dougajmcdonald. dostałeś odpowiedź? – richardwhatever