如何使用MSTest确定两个List <fileinfo>是否包含相同的元素?</fileinfo>

时间:2013-06-30 01:41:46

标签: c# unit-testing mstest

我想弄清楚如何确定两个List<FileInfo>何时不同。为什么MSTest告诉我这两个与CollectionAssert.AreEquivalentSequenceEqual不同?

测试失败:CollectionAssert.AreEquivalent failed. The expected collection contains 1 occurrence(s) of <C:\Windows\Microsoft.NET\Framework\v3.0\WPF\PenIMC.dll>. The actual collection contains 0 occurrence(s).

    string basePath = Path.Combine(Environment.GetEnvironmentVariable("windir"),
                                   @"Microsoft.NET\Framework\v3.0\WPF");

    var fiList1 = new List<FileInfo> { new FileInfo(Path.Combine(basePath, "PenIMC.dll")) };
    var fiList2 = new List<FileInfo> { new FileInfo(Path.Combine(basePath, "PenIMC.dll"))};

    CollectionAssert.AreEquivalent(fiList1, fiList2); //why is this failing?
    //And this one too...
    Assert.IsTrue(fiList1.SequenceEqual(fiList2));

我可以使用类似于this的简单类型(例如int),但不能使用List<FileInfo>。如果仅仅通过查看上面的代码就无法确定这一点,可能会提供一种巧妙的方法来研究它 - 例如将对象序列化为XML,我可以将它们区分开来。我猜我错过了一些东西。

1 个答案:

答案 0 :(得分:1)

我认为这与参考平等有关。如果将new FileInfo存储在同一个变量中,则可以正常工作。因此,您必须使用覆盖Equals方法

的复杂类型