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

The*_*rer 4 c# comparison unit-testing

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

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

班级:

public class MustBeCorrect
{
     public string Name { get; set; }
     IEnumerable<string> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

测试:

[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!
}
Run Code Online (Sandbox Code Playgroud)

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

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

The*_*rer 5

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

但是,您可以设置一个选项,IgnoreObjectTypes称为ComparisonConfig. 它默认为false,但如果您将其设置为true,它应该为您提供您想要的集合行为。

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