this questionに記載されているように、別のList<FileInfo>
に存在しないList<FileInfo>
の要素を返すメソッドに取り組んでいます。次のように私はNawfalのソリューションを実装しました:このCollectionAssert.AreEquivalent()テストが失敗するのはなぜですか?
public List<FileInfo> SourceNotInDest(List<FileInfo> SourceFiles, List<FileInfo> DestFiles)
{
var notInDest = SourceFiles.Where(c => !DestFiles.Any(p => p.Name == c.Name)).ToList();
return notInDest;
}
、ソースファイルに設定された私のデータは次のとおりです。
u:\folder1\a.txt
u:\folder1\b.txt
u:\folder1\c.txt
u:\folder1\d.txt
DestFilesです:
u:\folder2\a.txt
u:\folder2\b.txt
u:\folder2\c.txt
私は、コードをステップ実行してリストを調べるとこれは期待される結果を返すようです。両方のリストには、同じファイルパスと同じ他のプロパティを持つ一つの要素を持っている - - テストはメッセージで失敗しresult
とexpectedResult
は、同じ内容を持っているにもかかわらず
public void SourceNotInDestTest()
{
//arrange
FileListComparer flc = new FileListComparer(); //class that has the list compare method
FolderReader fr = new FolderReader(); //class for getting FileInfo from folder
List<FileInfo> expectedResult = new List<FileInfo>();
expectedResult.Add(new FileInfo(@"U:\folder1\d.txt"));
List<FileInfo> SourceFiles = fr.fileList(@"U:\folder1"); //gets the FileInfo for each file in the folder
List<FileInfo> DestFiles = fr.fileList(@"U:\folder2");
//act
List<FileInfo> result = flc.SourceNotInDest(FTPFiles, LocalFiles);
//assert
CollectionAssert.AreEquivalent(result, expectedResult);
}
:しかし、ユニットテストは、次のコードで失敗します:
CollectionAssert.AreEquivalent failed. The expected collection contains 1 occurrence(s)
of <U:\folder1\d.txt>. The actual collection contains 0 occurrence(s).
expectedResult
は、しかし、U:\folder1\d.txt
の発生を持っています。おそらく問題は、それらのオブジェクトの内容の代わりに2つのオブジェクトのメモリアドレスを比較しているということだと思っていたが、AreEquivalent()
がプロパティを比較していると思った。そうじゃないの?
EDIT:プロパティの代わりに、アドレスを比較に関するアドバイスをもとに、私はテストが通過を許可され、代わりにこのアサートを使用:
foreach (FileInfo fi1 in result)
{
Assert.IsNotNull(expectedResult.Find(fi2 => fi2.FullName == fi1.FullName));
}
foreach (FileInfo fi1 in expectedResult)
{
Assert.IsNotNull(result.Find(fi2 => fi2.FullName == fi1.FullName));
}