Модульное тестирование перенаправления ASP.NET MVC

Как Unit Test перенаправление MVC?

public ActionResult Create(Product product)
{
    _productTask.Save(product);
    return RedirectToAction("Success");   
}

public ActionResult Success()
{ 
     return View();
}

Является подход Айенде, лучший вариант, с предварительным просмотром 5:

 public static void RenderView(this Controller self, string action) 
 {
    typeof(Controller).GetMethod("RenderView").Invoke(self,new object[] { action} ); 
 }

Кажется странным, что нужно это делать, особенно потому, что команда MVC заявила, что они пишут рамки, подлежащие тестированию.

Ответы

Ответ 1

[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");
    }
}

Ответ 2

Это работает для ASP.NET MVC 5 с помощью NUnit:

    [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"));

Ответ 3

Вы можете утверждать, что в возвращаемом ActionResult вам нужно будет применить его к соответствующему типу, но это позволит вам использовать тестирование на основе состояния. Поиск в Интернете должен найти полезные ссылки, здесь всего один.

Ответ 4

вы можете использовать Mvc.Contrib.TestHelper, который предоставляет утверждения для тестирования перенаправления. Посмотрите http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html и образец кода. Это может быть полезно.