[英]“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字符串,它的预期值,因此,如果运行时绑定是不是在玩有趣的测试将通过。
我得不到什么? 我做错了什么,我该如何解决这个问题? 如何让断言通过?
你真的不需要动态。 这是一个例子。 假设您有以下要进行单元测试的操作:
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"]);
您也可能会发现以下博客文章很有用。
JsonResult
的Data
属性是Object
类型,这意味着,虽然您有动态声明,但设置的类型仍然是Object
。 另一个问题是您使用匿名类型作为Data
,然后尝试将其作为其适用范围之外的声明实例进行访问。 使用@ Darin的技术使用RouteValueDictionary
访问属性值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.