Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定两个列表是否<;FileInfo>;是否使用MSTest包含相同的元素?_C#_Unit Testing_Mstest - Fatal编程技术网

C# 如何确定两个列表是否<;FileInfo>;是否使用MSTest包含相同的元素?

C# 如何确定两个列表是否<;FileInfo>;是否使用MSTest包含相同的元素?,c#,unit-testing,mstest,C#,Unit Testing,Mstest,我试图找出如何确定两个列表何时不同。为什么MSTest告诉我这两个与CollectionAssert.Areequality或SequenceEqual不同 测试失败,原因是:CollectionAssert.Areequality失败。预期的集合包含1次出现的。实际集合包含0个事件。 string basePath=Path.Combine(Environment.GetEnvironmentVariable(“windir”), @“Microsoft.NET\Framework\v3.0\

我试图找出如何确定两个
列表
何时不同。为什么MSTest告诉我这两个与
CollectionAssert.Areequality
SequenceEqual
不同

测试失败,原因是:
CollectionAssert.Areequality失败。预期的集合包含1次出现的。实际集合包含0个事件。

string basePath=Path.Combine(Environment.GetEnvironmentVariable(“windir”),
@“Microsoft.NET\Framework\v3.0\WPF”);
var fiList1=新列表{new FileInfo(Path.Combine(basePath,“PenIMC.dll”)};
var fiList2=新列表{new FileInfo(Path.Combine(basePath,“PenIMC.dll”)};
征收资产等价物(文件1、文件2)//为什么会失败?
//还有这个。。。
Assert.IsTrue(fiList1.SequenceEqual(fiList2));

我可以使用类似的简单类型,例如
int
,但不能使用我的
列表。如果您不能仅仅通过查看上面的代码来确定这一点,那么可以提供一种聪明的方法来研究这一点——比如将对象序列化为XML,然后我可以将它们区分开来。我猜我遗漏了一些东西。

我相信这与引用相等有关。如果将
newfileinfo
存储在同一个变量中,则此操作有效。因此,您必须使用一个覆盖
Equals
方法的复杂类型

,因此只需创建我自己的比较器类型来覆盖eqauls,如下所示?:如果它不是您可以覆盖的内容,则似乎是这样。我想,如果CollectionAssert的描述是这样的话,我不会想到这一点。Areequality。。。如果元素的值相等,则元素相等,而不是引用同一对象
    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));