我想弄清楚如何确定两个List<FileInfo>
何时不同。为什么MSTest告诉我这两个与CollectionAssert.AreEquivalent
或SequenceEqual
不同?
测试失败: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,我可以将它们区分开来。我猜我错过了一些东西。
答案 0 :(得分:1)
我认为这与参考平等有关。如果将new FileInfo
存储在同一个变量中,则可以正常工作。因此,您必须使用覆盖Equals
方法