如何对MVC重定向进行单元测试?
public ActionResult Create(Product product)
{
_productTask.Save(product);
return RedirectToAction("Success");
}
public ActionResult Success()
{
return View();
}
Ayende's方法仍然是最好的方法吗,预览5:
public static void RenderView(this Controller self, string action)
{
typeof(Controller).GetMethod("RenderView").Invoke(self,new object[] { action} );
}
不得不这样做似乎很奇怪,特别是MVC团队已经说过,他们正在编写可测试的框架。
发布于 2008-09-12 12:29:03
[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");
}
}
发布于 2016-01-26 23:27:03
这适用于使用NUnit的ASP.NET MVC5:
[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"));
发布于 2008-09-12 12:09:53
您可以对返回的ActionResult进行断言,您需要将其强制转换为适当的类型,但它确实允许您使用基于状态的测试。在网上搜索应该会找到一些有用的链接,不过这里是just one。
https://stackoverflow.com/questions/58513
复制相似问题