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

Как выполнить модульное тестирование перенаправления MVC?

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

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

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

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

Это кажется странным, тем более, что команда MVC заявила, что пишет фреймворк, чтобы его можно было тестировать.


person Dan    schedule 12.09.2008    source источник


Ответы (4)


Это работает для 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"));
person Kevin O'Shaughnessy    schedule 26.01.2016

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

person Community    schedule 12.09.2008

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

person hurbata    schedule 16.06.2010
comment
Согласно часто задаваемым вопросам "Be careful, because the community frowns on overt self-promotion and tends to vote it down and flag it as spam. Post good, relevant answers, and if they happen to be about your product or website, so be it. However, you must disclose your affiliation in your answers. Also, if a huge percentage of your posts include a mention of your product or website, you're probably here for the wrong reasons." - person ; 14.04.2011

person    schedule
comment
RedirectToRouteResult.Values[] теперь RedirectToRouteResult.RouteValues[...] - person mxmissile; 07.07.2009
comment
кто-нибудь знает, как вы можете вызвать действие при перенаправлении во время тестирования? - person f0ster; 07.01.2010
comment
@f0ster Зачем тебе это? В любом случае, controller.Success() в приведенном выше примере сделает это. - person bzlm; 09.03.2010