【问题标题】:Posting JSON to ASP.NET MVC 3.0 RC Controller and Unit Testing将 JSON 发布到 ASP.NET MVC 3.0 RC 控制器和单元测试
【发布时间】:2010-12-05 15:54:11
【问题描述】:

在 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。情况似乎并非如此。任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    通常,您的控制器操作应采用强类型视图模型:

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

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      相关资源
      最近更新 更多