代码之家  ›  专栏  ›  技术社区  ›  TheCatWhisperer

KellermanSoftware CompareneObjects,比较不同类型的集合

  •  -1
  • TheCatWhisperer  · 技术社区  · 7 年前

    我正在使用CompareNet对象对我的系统进行自动测试。这有助于确保性能优化不会改变系统的预期行为,并确保不会引入错误。

    当我有一个以抽象方式声明的集合时,我希望比较内容,而不是集合本身;但是,我看不到启用此功能的选项。

    课程:

    public class MustBeCorrect
    {
         public string Name { get; set; }
         IEnumerable<string> Items { get; set; }
    }
    

    测试:

    [Fact] void IsCorrect()
    {
        var obj1 = new MustBeCorrect
        {
            Name = "Kitty",
            Items = new string[]
            {
               "Collar",
               "Bell"
            }
        };
        var obj2 = new MustBeCorrect
        {
            Name = "Kitty",
            Items = new List<string>
            {
               "Collar",
               "Bell"
            }
        };
        comparer.Compare(obj1, obj2); // False!
    }
    

    尽管两个对象之间的唯一区别是一个使用数组,另一个使用列表,但上述两个对象的比较结果并不相等。然而,就我的合同而言,这两个人似乎应该被认为是平等的。

    如何将比较选项配置为仅比较集合的内容,而不是集合本身?

    1 回复  |  直到 7 年前
        1
  •  1
  •   TheCatWhisperer    7 年前

    没有一种方法可以专门为收藏做你想做的事情。

    但是,有一个选项可以设置为 IgnoreObjectTypes 在 ComparisonConfig .默认为 false ,但如果你设定为 true ,它应该给你的行为,你希望你的收藏。

    请注意,这将忽略所有比较的对象类型。