【问题标题】:KellermanSoftware CompareNetObjects, comparing collections of different typesKellermanSoftware CompareNetObjects,比较不同类型的集合
【发布时间】:2026-02-09 23:20:05
【问题描述】:

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

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

类:

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!
}

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

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

【问题讨论】:

    标签: c# unit-testing comparison


    【解决方案1】:

    不存在专门针对集合执行您想要的操作的方法。

    但是,您可以在ComparisonConfig 中设置一个名为IgnoreObjectTypes 的选项。默认为false,但如果您将其设置为true,它应该会为您提供所需的收藏行为。

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

    【讨论】: