我试图像这样返回一个非常简单的匿名对象作为 Json:
[HttpGet]
public JsonResult GetJson()
{
return Json(new {
id = 1,
child = new
{
id = 12,
name = "woop woop"
}
});
}
然后我有一个验证 id = 1 的测试用例
[TestMethod]
public void TestMethod4()
{
var controller = new ValuesController();
dynamic result = controller.GetJson();
Assert.AreEqual(1, result.Value.id);
}
结果是:
Message: Test method UnitTestProject1.UnitTest1.TestMethod4 threw exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'object' does not contain a definition for 'id'
最佳答案
你的方法返回一个JsonResult
,它包含一个属性Data
,这是你的对象,所以你的代码应该是
[TestMethod]
public void TestMethod4()
{
var controller = new ValuesController();
dynamic result = controller.GetJson().Data; // returns { id = 1, child = new { id = 12, name = "woop woop" } }
Assert.AreEqual(1, result.id);
}
但是匿名对象是内部的
,因此您还需要让您的对象对您的测试项目可见。在包含 ValuesController
类的项目的 AssemblyInfo.cs
文件中,添加
[assembly: InternalsVisibleTo("YourProjectName.UnitTestProject1")]
关于c# - 解析来自 API 的动态 jsonResult 响应给出 "object does not contain definition for X",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46684016/