【问题标题】:Assert.Equal anonymous objects across assemblies fails跨程序集的 Assert.Equal 匿名对象失败
【发布时间】:2014-04-01 15:04:57
【问题描述】:

我的 Assert.Equal() 匿名对象返回 false,但是在调试器中非常仔细地手动检查属性,一切似乎都很好。

它不会抱怨每个属性,只有以下内容(如果您在差异工具中进行比较,则完全相同)。

预期:{ id = 1,name = ,children = System.Collections.Generic.List1[System.Collections.Generic.Dictionary2[System.String,System.String]] } (f__AnonymousType13[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.List1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]], mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089]],mscorlib,版本=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]])


实际:{ id = 1, name = , children = System.Collections.Generic.List1[System.Collections.Generic.Dictionary2[System.String,System.String]] } (f__AnonymousType13[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.List1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]], mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089]],mscorlib,版本=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]])

【问题讨论】:

    标签: c# assert equality anonymous-types compareobject


    【解决方案1】:

    看完后:

    Anonymous types unify within an assembly, Part One

    Anonymous Types Unify Within An Assembly, Part Two

    据我所知;在一个程序集中,如果一个匿名对象以相同的顺序具有相同的属性,则可以将它们作为相同的类型进行比较。但在单独的程序集中,它们不能作为同一类型进行比较。

    经过大量试验和错误,我改用CompareObjects open source project 来更好地控制相等性检查。这并不理想,因为我更愿意坚持使用 Assert ......但我需要在我的上下文中使用对象,所以这对于我的问题来说是一个非常优雅的解决方案。

     CompareObjects compareObjects = new CompareObjects();
     compareObjects.MaxDifferences = 1000;
     compareObjects.IgnoreObjectTypes = true; //handles anonymous types
     bool isSame = compareObjects.Compare(exepected, actual);
     Assert.True(isSame, compareObjects.DifferencesString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2021-08-01
      • 2020-12-22
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多