我正在为mvc Web应用程序编写单元测试,该应用程序检查返回的匿名变量列表(在jsonresult中)是否正确。因此我需要遍历该列表,但我似乎无法找到一种方法。
所以我有两种方法
1)返回json结果。在那个json结果中有一个叫做data的属性。该属性是object类型,但在内部它是一个匿名变量列表
2)该方法调用方法1并检查返回的jsonresult是否正常。
如果我运行测试并打破调试器,我可以将鼠标悬停在结果上并查看其中的项目。我只是没有找到在代码中这样做的方法。(只使用foreach是不可能的,因为在我需要它的时候我不在创建匿名方法的方法中)
答案 0 :(得分:1)
我认为你的意思是“匿名类型”,你说的是“匿名变量” - 但你仍然可以使用foreach
遍历列表,只是将迭代变量声明为类型object
:< / p>
foreach (object o in myList)
{
// Not sure what you're actually trying to do in here...
}
如果需要检查内容,可以使用匿名类型以有用的方式覆盖ToString
这一事实。您的测试可以检查将每个元素投影到字符串的结果。实际上,您可以非常轻松地将结果对象转换为字符串序列:
var strings = ((IEnumerable) result).Cast<object>.Select(x => x.ToString());
然后可能使用SequenceEqual
测试strings
。
答案 1 :(得分:0)
创建一组相同的对象到您期望的对象,然后序列化它和单元测试下的动作的result.Data。最后,比较一下流是否相同。
答案 2 :(得分:0)
好吧,我发现它是你解决方案的一部分:) 显然我可以将它转换为IEnumerable,然后我可以迭代结果。 THX!
var objects= ((IEnumerable)result.Data);
foreach (object obj in objects)
{
//inhere i can use reflection to get the properties out of it
}