使用匿名类型进行单元测试 - JSON

时间:2016-03-27 09:07:30

标签: c# json unit-testing

我必须编写一个测试控制器的单元测试,该控制器碰巧将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属性。

我该怎么做呢?

Error

Content Property

2 个答案:

答案 0 :(得分:3)

我解决了这个问题。

问题在于[assembly: InternalsVisibleTo()]属性。

我不小心把它放在我的单元测试项目中,而不是在从控制器返回匿名类型的Web API应用程序中。

将此添加到Web API项目中的AssemblyInfo.cs文件中,并使用具有该属性的单元测试项目名称解决了错误,并且dynamic对象现在按预期填充。

Valid dynamic Content property

答案 1 :(得分:0)

您可以在调用GetPerson之前实例化动态对象,就像在此处完成一样

C# ‘dynamic’ cannot access properties from anonymous types declared in another assembly