जैसा कि this question में वर्णित है, मैं एक विधि पर काम कर रहा हूं जो एक List<FileInfo>
से तत्व लौटाता है जो List<FileInfo>
में मौजूद नहीं हैं।यह संग्रहAssert.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;
}
मेरे SourceFiles के लिए डेटा सेट है:
u:\folder1\a.txt
u:\folder1\b.txt
u:\folder1\c.txt
u:\folder1\d.txt
DestFiles है: इस प्रकार मैं Nawfal के समाधान को क्रियान्वित किया है
u:\folder2\a.txt
u:\folder2\b.txt
u:\folder2\c.txt
जब मैं कोड के माध्यम से कदम और सूचियों की जांच 'मान, यह अपेक्षित परिणाम वापस करने के लिए प्रतीत होता है। लेकिन इकाई परीक्षण निम्न कोड के साथ विफल रहता है:
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);
}
हालांकि 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
के एक घटना है, हालांकि है। मैं सोच रहा था कि समस्या यह है कि मैं स्मृति वस्तुओं को उन वस्तुओं की सामग्री के बजाय दो वस्तुओं के लिए तुलना कर रहा हूं, लेकिन मैंने सोचा कि AreEquivalent()
गुणों की तुलना कर रहा था। क्या यह मामला नहीं है?
संपादित करें: पतों की बजाय गुण की तुलना के बारे में सलाह के आधार पर, मैं इस जोर बजाय प्रयोग किया है, जो परीक्षा उत्तीर्ण करने की अनुमति दी:
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));
}