将JSON发布到ASP.NET MVC 3.0 RC控制器和单元测试

时间:2010-12-05 15:54:12

标签: asp.net-mvc unit-testing asp.net-mvc-3

在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。似乎并非如此。非常感谢任何帮助。

1 个答案:

答案 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类型,但您不需要对此进行测试。它已经内置。