繁体   English   中英

“动态”关键字和JSON数据

[英]“dynamic” keyword and JSON data

我的ASP.NET MVC2应用程序中的一个操作方法返回一个JsonResult对象,在我的单元测试中,我想检查返回的JSON对象是否确实包含了预期的值。

我试过这个:

1. dynamic json = ((JsonResult)myActionResult).Data;
2. Assert.AreEqual(JsonMessagesHelper.ErrorLevel.ERROR.ToString(), json.ErrorLevel);

但我得到一个RuntimeBinderException“'对象'不包含'ErrorLevel'的定义”。

然而,当我把第2行断点和检查JSON动态变量(见下图),这显然包含的ErrorLevel字符串,它的预期值,因此,如果运行时绑定是不是在玩有趣的测试将通过。

Locals调试器窗口的快照

我得不到什么? 我做错了什么,我该如何解决这个问题? 如何让断言通过?

你真的不需要动态。 这是一个例子。 假设您有以下要进行单元测试的操作:

public ActionResult Index()
{
    return Json(new { Id = 5, Foo = "bar" });
}

和相应的测试:

// act
var actual = subjectUnderTest.Index();

// assert
var data = new RouteValueDictionary(actual.Data);
Assert.AreEqual(5, data["Id"]);
Assert.AreEqual("bar", data["Foo"]);

您也可能会发现以下博客文章很有用。

JsonResultData属性是Object类型,这意味着,虽然您有动态声明,但设置的类型仍然是Object 另一个问题是您使用匿名类型作为Data ,然后尝试将其作为其适用范围之外的声明实例进行访问。 使用@ Darin的技术使用RouteValueDictionary访问属性值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM