Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匿名类型的单元测试-JSON_C#_Json_Unit Testing - Fatal编程技术网

C# 匿名类型的单元测试-JSON

C# 匿名类型的单元测试-JSON,c#,json,unit-testing,C#,Json,Unit Testing,我必须编写一个单元测试来测试一个控制器,该控制器恰好以匿名类型返回JSON 这是匿名的唯一原因是我需要向其添加根节点,因此控制器返回的结果如下所示: return Json(new { User = person }); 这将向JSON添加一个带有“User”的根节点,后跟序列化为JSON的Person对象 这很好,我的问题是单元测试 我见过的测试匿名类型的唯一解决方案是,首先使用AssemblyInfo.cs中的InternalsVisibleTo使测试项目可见,然后使用dynamic获得结

我必须编写一个单元测试来测试一个控制器,该控制器恰好以匿名类型返回JSON

这是匿名的唯一原因是我需要向其添加根节点,因此控制器返回的结果如下所示:

return Json(new { User = person });
这将向JSON添加一个带有“User”的根节点,后跟序列化为JSON的
Person
对象

这很好,我的问题是单元测试

我见过的测试匿名类型的唯一解决方案是,首先使用AssemblyInfo.cs中的
InternalsVisibleTo
使测试项目可见,然后使用
dynamic
获得结果

    dynamic results = userController.GetPerson(1);
    dynamic content = results.Content;
这在第二行失败,表示
对象
没有内容属性。但是,在调试器下,它显示内容属性

我该怎么测试这个呢


您可以在调用GetPerson之前实例化动态对象,就像在这里一样

我解决了这个问题

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

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

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


结果。内容有效。我可以在VisualStudio调试器中看到它,它包含一个有效的对象并设置了属性。我不理解为什么在这里处理
动态
对象时,它声称
对象
不包含
内容
属性,但是如果我在Visual Studio调试器中查看该对象并展开
内容
,它都是有效的。您可以在调用GetPerson之前实例化动态对象,就像在这里一样