在单元测试中是否有一种简单的方法来验证控制器动作确实重定向到特定页面?
控制器代码:
- public ActionResult Create(ProductModel newProduct)
- {
- this.repository.CreateProduct(newProduct);
- return RedirectToAction("Index");
- }
所以在我的测试中,我需要验证控制器实际上是重定向.
- ProductController controller = new ProductController(repository);
- RedirectToRouteResult result = (RedirectToRouteResult)controller.Create(newProduct);
- bool redirected = checkGoesHere;
- Assert.True(redirected,"Should have redirected to 'Index'");
我只是不知道如何做验证.有任何想法吗?
解决方法
当然:
- Assert.AreEqual("Index",result.RouteValues["action"]);
- Assert.IsNull(result.RouteValues["controller"]); // means we redirected to the same controller
并使用MvcContrib.TestHelper,您可以以更优雅的方式编写本机测试(您甚至不需要投射到RedirectToRouteResult):
- // arrange
- var sut = new ProductController(repository);
- // act
- var result = sut.Create(newProduct);
- // assert
- result
- .AssertActionRedirect()
- .ToAction("Index");