Подтвердить что ты не робот

Проверить перенаправление с помощью 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'");

Я просто не уверен, как сделать проверку. Любые идеи?

4b9b3361

Ответ 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");

Надеюсь, что это поможет:)