在MVC3 3中,我们可以将基于JSON的请求发布到MVC控制器,它将自动绑定结果。我一直在试着如何正确地进行单元测试,并希望这里的专家能够让我走上正确的道路。
可以在预览博客文章中找到带有json结果的简单jquery帖子的示例: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", "jon@mail.com"}
};
_controller.ValueProvider = formfakey;
//execute
var result = _controller.ThemeContent(formfakey) as RedirectToRouteResult;
// assert
Assert.AreEqual("index", result.RouteValues["action"]);
Assert.AreEqual("success", result.RouteValues["controller"]);
我曾预料到我可以使用JSON对象复制此代码并将其设置为控制器ValueProvider。似乎并非如此。非常感谢任何帮助。
答案 0 :(得分:2)
通常,您的控制器操作应采用强类型视图模型:
[HttpPost]
public ActionResult UpdateProduct(Product product)
{
return View();
}
因此,您将测试此控制器操作与任何其他控制器操作一样。关于此控制器操作没有什么特别的,与JSON相关:
[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类型,但您不需要对此进行测试。它已经内置。