Застрял в подвешенном состоянии: тестирование файловых классов зависает с IOException - PullRequest
0 голосов
/ 21 февраля 2012

В наши дни я склонен удивляться, но этот маленький подонок действительно владел мной партизанским стилем:

Тестируемый метод: CopyAllFiles (sourceDir, targetDir) - Мне не нужно объяснять, что он делает.

В моем тесте я создаю обе директории перед вызовом испытуемого. Кроме того, я добавляю три файла в каталог, созданный в расположении sourceDir. Пусть код говорит:

FileSystemService serviceUnderTest = new FileSystemService(); 
string sourcePath= Path.Combine(_dateiPfad, "quelle");
string destinationPath= Path.Combine(_dateiPfad, "ziel");

Directory.CreateDirectory(sourcePath);
Directory.CreateDirectory(destinationPath);
File.Create(Path.Combine(sourcePath , "Foo.txt"));
File.Create(Path.Combine(sourcePath , "Bar.csv"));
File.Create(Path.Combine(sourcePath , "Baz.xls"));

serviceUnderTest.CopyAllFiles(sourcePath, destinationPath);
IEnumerable<string> sourceFiles= from fileName in Directory.GetFiles(sourcePath) select fileName;
IEnumerable<string> destinationFiles= from fileName in Directory.GetFiles(destinationPath) select fileName ;

Assert.IsTrue(sourceFiles.SequenceEqual(destinationFiles));

Я получаю IOException, говорящую «Файл используется другим процессом». Почему я не могу получить доступ к только что созданным файлам?

Большое спасибо заранее!

1 Ответ

2 голосов
/ 21 февраля 2012

File.Create () возвращает FileStream созданного файла.Вам нужно закрыть поток, прежде чем вы сможете получить доступ к файлу в методе CopyAllFiles ():

FileStream foo = File.Create(Path.Combine(sourcePath, "Foo.txt"));
foo.Close();

Вы также можете использовать WriteAllText для записи тестовых файлов:

File.WriteAllText(Path.Combine(sourcePath, "Foo.txt"),"FooTest");
...