Модульное тестирование ASP.NET перенаправление 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 сказала, что они пишут фреймворк, чтобы быть тестируемым.
4 ответа:
[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"); } }
Это работает для 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"));
Вы можете утверждать, что возвращаемый ActionResult необходимо привести к соответствующему типу, но он позволяет использовать тестирование на основе состояния. Поиск в Интернете должен найти несколько полезных ссылок, вот только одна.
Вы можете использовать Mvc.ВНО.TestHelper, который предоставляет утверждения для тестирования перенаправлений. Взгляните на http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html и образец кода. Это может оказаться полезным.