17

MVC リダイレクトを単体テストするにはどうすればよいですか?

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

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

プレビュー 5 では、 Ayende のアプローチは依然として最善の方法ですか?

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

特にMVCチームは、フレームワークをテスト可能にするために書いていると言っているので、これをしなければならないのは奇妙に思えます。

4

4 に答える 4

29
[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");
    }
}
于 2008-09-12T12:29:02.860 に答える
0

これは、NUnit を使用する ASP.NET MVC 5 で機能します。

    [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"));
于 2016-01-26T15:27:03.423 に答える
-1

返された ActionResult でアサートできます。適切な型にキャストする必要がありますが、状態ベースのテストを使用できます。Web で検索すると、役立つリンクがいくつか見つかるはずですが、ここではその 1 つだけを示します。

于 2008-09-12T12:09:53.030 に答える
-1

リダイレクトをテストするためのアサーションを提供する Mvc.Contrib.TestHelper を使用できます。http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.htmlとコード サンプルをご覧ください。役に立つかもしれません。

于 2010-06-16T22:05:38.470 に答える