Asp.net

單元測試 ASP.NET MVC 重定向

  • January 26, 2016

如何對 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"));

引用自:https://stackoverflow.com/questions/58513