Модульное тестирование перенаправления ASP.NET MVC
Как Unit Test перенаправление MVC?
public ActionResult Create(Product product)
{
_productTask.Save(product);
return RedirectToAction("Success");
}
public ActionResult Success()
{
return View();
}
Является подход Айенде, лучший вариант, с предварительным просмотром 5:
public static void RenderView(this Controller self, string action)
{
typeof(Controller).GetMethod("RenderView").Invoke(self,new object[] { action} );
}
Кажется странным, что нужно это делать, особенно потому, что команда MVC заявила, что они пишут рамки, подлежащие тестированию.
Ответы
Ответ 1
[TestFixture]
public class RedirectTester
{
[Test]
public void Should_redirect_to_success_action()
{
var controller = new RedirectController();
var result = controller.Index() as RedirectToRouteResult;
Assert.That(result, Is.Not.Null);
Assert.That(result.Values["action"], Is.EqualTo("success"));
}
}
public class RedirectController : Controller
{
public ActionResult Index()
{
return RedirectToAction("success");
}
}
Ответ 2
Это работает для ASP.NET MVC 5 с помощью NUnit:
[Test]
public void ShouldRedirectToSuccessAction()
{
var controller = new RedirectController();
var result = controller.Index() as RedirectToRouteResult;
Assert.That(result.RouteValues["action"], Is.EqualTo("success"));
}
Если вы хотите проверить, что вы перенаправляетесь на другой контроллер (например, NewController), утверждение будет выглядеть следующим образом:
Assert.That(result.RouteValues["controller"], Is.EqualTo("New"));
Ответ 3
Вы можете утверждать, что в возвращаемом ActionResult вам нужно будет применить его к соответствующему типу, но это позволит вам использовать тестирование на основе состояния. Поиск в Интернете должен найти полезные ссылки, здесь всего один.
Ответ 4
вы можете использовать Mvc.Contrib.TestHelper, который предоставляет утверждения для тестирования перенаправления. Посмотрите http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html и образец кода. Это может быть полезно.