我必须编写一个测试控制器的单元测试,该控制器碰巧将JSON作为匿名类型返回。
这是匿名的唯一原因是因为我需要为它添加一个根节点,所以从控制器返回的内容如下:
warning: 'a' macro redefined [-Wmacro-redefined]
这会向JSON添加一个根节点,其中包含" User",后跟一个序列化为JSON的return Json(new { User = person });
对象。
这很好用,我的问题在于单元测试。
我在测试这样的匿名类型时遇到的唯一解决方案是首先使用AssemblyInfo.cs中的Person
使测试项目可见,然后使用InternalsVisibleTo
来获取结果。< / p>
dynamic
第二行失败,说 dynamic results = userController.GetPerson(1);
dynamic content = results.Content;
没有Content属性。但是,在调试器下,它显示了Content属性。
我该怎么做呢?
答案 0 :(得分:3)
我解决了这个问题。
问题在于[assembly: InternalsVisibleTo()]
属性。
我不小心把它放在我的单元测试项目中,而不是在从控制器返回匿名类型的Web API应用程序中。
将此添加到Web API项目中的AssemblyInfo.cs文件中,并使用具有该属性的单元测试项目名称解决了错误,并且dynamic
对象现在按预期填充。
答案 1 :(得分:0)
您可以在调用GetPerson之前实例化动态对象,就像在此处完成一样
C# ‘dynamic’ cannot access properties from anonymous types declared in another assembly