2010-12-05 23 views
2

MVC3内で、JSONベースのリクエストをMVCコントローラに投稿すると、結果が自動的にバインドされます。私はこれを適切にテストする方法について頭を悩まされてきており、ここの専門家が私を正しい道につけてくれることを期待していました。 JSON結果にシンプルなjQueryのポストのJSONをASP.NET MVC 3.0 RCコントローラおよびユニットテストに投稿する

例がプレビューブログの記事で見つけることができ

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx

MVC 2の中で、私はこのような単純なユニットテストを作成して行うことができます:

 // setup 
     FormCollection formfakey = new FormCollection 
     { 
      {"address1", "123 test street"}, 
      {"email", "[email protected]"} 
     }; 

     _controller.ValueProvider = formfakey; 

     //execute 
     var result = _controller.ThemeContent(formfakey) as RedirectToRouteResult; 

     // assert 
     Assert.AreEqual("index", result.RouteValues["action"]); 
     Assert.AreEqual("success", result.RouteValues["controller"]); 

I私は本質的にこのコードをJSONオブジェクトと複製し、それをコントローラValueProviderに設定できると予想していました。これはそうではないようです。どんな支援も大歓迎です。

答えて

2

通常、あなたのコントローラのアクションは強く型付けされたビューモデルを取る必要があります。

[HttpPost] 
public ActionResult UpdateProduct(Product product) 
{ 
    return View(); 
} 

だから、他のコントローラのアクションとして、このコントローラのアクションをテストします。

[TestMethod] 
public void SomeTest() 
{ 
    // arrange 
    var controller = new HomeController(); 
    var product = new Product(); 

    // act 
    var actual = controller.UpdateProduct(product); 

    // assert 
    // TODO: 
} 

このようなJSONについては、わかりません。それは組み込みのJsonValueProviderFactoryで、JSONリクエストを.NETタイプにバインドすることを解釈することができますが、これをテストする必要はありません。すでに組み込まれています。

+0

もちろんです。ダーリンに感謝します。 – Jesse