Проверить перенаправление с помощью unit test в asp.net mvc
Есть ли простой способ проверить в unit test, что действие контроллера действительно перенаправляется на определенную страницу?
Код контроллера:
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'");
Я просто не уверен, как сделать проверку. Любые идеи?
Ответы
Ответ 1
Конечно:
Assert.AreEqual("Index", result.RouteValues["action"]);
Assert.IsNull(result.RouteValues["controller"]); // means we redirected to the same controller
и используя MvcContrib.TestHelper, вы можете написать этот unit test более элегантным способом (вам даже не нужно бросать a RedirectToRouteResult
):
// arrange
var sut = new ProductController(repository);
// act
var result = sut.Create(newProduct);
// assert
result
.AssertActionRedirect()
.ToAction("Index");
Ответ 2
Попробуйте это...
var result = sut.Create(newProduct) as RedirectToRouteResult;
Assert.Equal(result.RouteValues["action"], "Index");
И если вы передаете параметр в перенаправление, вы можете сделать что-то вроде этого...
var result = sut.Create(newProduct) as RedirectToRouteResult;
Assert.Equal(result.RouteValues["action"], "Index");
Assert.Equal(result.RouteValues["Parameter Name"], "Parameter Value");
Надеюсь, что это поможет:)