我有一个返回
的方法return new System.Web.Mvc.JsonResult()
{
Data = new
{
Status = "OK",
}
}
我需要编写一个单元测试,我需要验证jsonResult.Data.status= "OK"
。
如何阅读状态属性?
更新: 我尝试了[assembly:InternalsVisibleTo(" TestingAssemblyName")],但这没有用。我不断收到错误{"' System.Web.Mvc.JsonResult'不包含' Status'"}
的定义此外我认为我不想修改我正在测试的代码。
所以我接受了Jon的建议并使用了反思。
var type = jsonResult.Data.GetType();
var pinfo = type.GetProperty("Status");
string statusValue = pinfo.GetValue(jsonResult.Data,null).ToString();
Assert.AreEqual("OK", statusValue);
答案 0 :(得分:18)
最简单的方法可能是使用动态类型:
dynamic foo = ret.Data;
Assert.AreEqual("OK", foo.status);
请注意,您需要使用[InternalsVisibleTo]
才能让您的单元测试程序集访问生产程序集中的匿名类型,因为它将使用internal
访问权限生成。
或者,只需使用反射。
答案 1 :(得分:6)
dynamic
:
dynamic testObject = YourMethodThatReturnsDynamicObject().Data;
Assert.AreEqual("OK", testObject.Status);