Asp.net
單元測試 ASP.NET MVC 重定向
如何對 MVC 重定向進行單元測試?
public ActionResult Create(Product product) { _productTask.Save(product); return RedirectToAction("Success"); } public ActionResult Success() { return View(); }Ayende 的方法仍然是最好的方法嗎,預覽 5:
public static void RenderView(this Controller self, string action) { typeof(Controller).GetMethod("RenderView").Invoke(self,new object[] { action} ); }必須這樣做似乎很奇怪,尤其是當 MVC 團隊表示他們正在編寫可測試的框架時。
[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"); } }
這適用於使用 NUnit 的 ASP.NET MVC 5:
[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"));