我有一個應用程序需要文件字典(文件類型和文件名列表),並將文件從原始目錄複製到另一個位置。 我已經得到了複製過程的基本代碼,但我需要做一些單元測試,以便儘可能健壯。Rhino Mocks測試文件系統io
我有我使用的包裝類,所以我可以測試System.IO方法被調用,因爲我期望,但我有一些困難,搞清楚如何形成測試,因爲有foreach和switch語句在碼。下面 示例代碼:
private IFileSystemIO _f;
public CopyFilesToDestination(IFileSystemIO f){
_f = f;
}
public void Cpy_Files(Dictionary<string, List<string>> files)
{
// get a list of the file types in the directory
var listOfFileTypes = new List<string>(files.Keys);
foreach (var fileType in listOfFileTypes){
var fileList = files[fileType].ToList();
foreach (var file in fileList){
switch(fileType){
case ".txt":
_f.Copy(file, @"c:\destination\text");
break;
case ".dat":
_.Copy(file, @"c:\destination\data");
break;
}
}
}
}
爲了測試我原以爲我會用一個模擬字典對象,建立與文件類型和路徑的列表,上面:
public virtual Dictionary<string, List<string>> FakeFiles(){
return fakeDictionary = new Dictionary<string, List<string>>(){
{".txt", new List<string>(){
"c:\test\file1.txt",
"c:\test\file2.txt"
}
},
{".dat", new List<string>(){
"c:\test\file1.dat",
"c:\test\file2.dat"
}
};
}
}
的第一個測試我來了看起來像這樣:
[Test]
public void Should_Copy_Text_Files(){
var dictionary = new FakeDictionary().FakeFiles();
var mockObject = MockRepository.GenerateMock<IFileSystemIO>();
var systemUnderTest = new CopyFileToDestination(mockObject);
systemUnderTest.Cpy_Files(dictionary);
// I think this means "test the operation, don't check the values in the arguments" but I also think I'm wrong
mockObject.AssertWasCalled(f => f.Copy("something", "something"), o => o.IgnoreArguments());
}
我的第一個問題是:我如何測試一個特定的文件類型,如「.txt」? 那麼我該如何測試循環?我用嘲諷的字典知道,我只有兩個項目,我是否利用這個來形成測試?怎麼樣?
我覺得我可能接近一個解決方案,但我沒時間/耐心地把它找下來。任何幫助是極大的讚賞。 感謝 吉姆
你如何確定在你的Switch語句中的文件類型是什麼..你正在編寫的包裝代碼看起來有點臃腫..如果你想測試一個文件是否有特定的擴展或不是爲什麼不做這個部分通過使用Path.GetExtension(字符串路徑)傳入的文件名上的switch語句採用名稱爲 – MethodMan 2012-01-05 13:55:11
的文件路徑文件類型是專有的,實際上是文件名的一部分,實際上不是擴展名。我只是以擴展爲例。但要回答您的問題,文件類型將從包含交換機的foreach中的文件類型列表中提取。 – crunchy 2012-01-06 13:30:21
好吧..這更有意義.. – MethodMan 2012-01-06 15:13:27