【发布时间】:2013-06-01 18:55:20
【问题描述】:
我试图在我的一个控制器中对返回 JsonResult 的方法进行单元测试。令我惊讶的是,以下代码不起作用:
[HttpPost]
public JsonResult Test() {
return Json(new {Id = 123});
}
这是我测试它的方式(另请注意,测试代码驻留在另一个程序集中):
// Act
dynamic jsonResult = testController.Test().Data;
// Assert
Assert.AreEqual(123, jsonResult.Id);
Assert 抛出异常:
“object”不包含“Id”的定义
我已经使用以下方法解决了它:
[HttpPost]
public JsonResult Test() {
dynamic data = new ExpandoObject();
data.Id = 123;
return Json(data);
}
我试图理解为什么第一个不起作用?它似乎也适用于除了匿名类型之外的任何东西。
【问题讨论】:
-
我用匿名类型尝试了你的代码,对我来说效果很好。不知道您为什么会收到该错误。
-
当您打印出
jsonResult.GetType()时会得到什么? (错误表明它认为它是object类型而不是<>f__AnonymousType0类型,这是我所期望的) -
类型确实是对象。我希望它自己工作,不知道为什么我会得到这些结果。
-
这个简短的 sn-p 对我来说很好用:
var result = new JsonResult { Data = new { Id = "foo" } }; dynamic foo = result.Data; Console.WriteLine(foo.Id);它对你有用吗? -
@KirkWoll,谢谢你的帮助,伙计,匿名似乎不能在其他库中使用(查看 LukLed 的答案),我不知道,要多读一些。
标签: c# asp.net-mvc json unit-testing