Я работаю над реализацией достаточно простого XML-сериализатора / десериализатора (анализатора файла журнала) в C # .NET с VS 2008. У меня сейчас около 50 модульных тестов для различных частей кода (в основном для различных сериализаций). операции), и некоторые из них, по-видимому, дают сбой в основном случайным образом, когда имеют дело с файловым вводом / выводом.
Структура тестов заключается в том, что в методе настройки теста я создаю новый пустой файл в определенном заранее определенном месте и закрываю поток, который получаю обратно. Затем я запускаю некоторые базовые тесты для файла (в зависимости от того, что именно тестируется). В методе очистки я снова удаляю файл.
Большая часть (обычно 30 или более, хотя число разных прогонов запускается) моих модульных тестов завершится неудачно при методе инициализации, утверждая, что они не могут получить доступ к файлу, который я пытаюсь создать. Я не могу определить точную причину, так как тест, который будет работать один прогон, не пройдёт следующий; все они успешны, когда бегут индивидуально.
В чем здесь проблема? Почему я не могу получить доступ к этому файлу в нескольких модульных тестах?
Соответствующие методы для модульного теста, который иногда будет неудачным:
[TestInitialize()]
public void LogFileTestInitialize()
{
this.testFolder =
System.Environment.GetFolderPath(
System.Environment.SpecialFolder.LocalApplicationData
);
this.testPath = this.testFolder + "\\empty.lfp";
System.IO.File.Create(this.testPath).Close();
}
[TestMethod()]
public void LogFileConstructorTest()
{
string filePath = this.testPath;
LogFile target = new LogFile(filePath);
Assert.AreNotEqual(null, target);
Assert.AreEqual(this.testPath, target.filePath);
Assert.AreEqual("empty.lfp", target.fileName);
Assert.AreEqual(this.testFolder + "\\empty.lfp.lfpdat", target.metaPath);
}
[TestCleanup()]
public void LogFileTestCleanup()
{
System.IO.File.Delete(this.testPath);
}
И конструктор LogFile()
:
public LogFile(String filePath)
{
this.entries = new List<Entry>();
this.filePath = filePath;
this.metaPath = filePath + ".lfpdat";
this.fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
}
Точное сообщение об ошибке:
Метод инициализации
LogFileParserTester.LogFileTest.LogFileTestInitialize
бросил исключение.
System.IO.IOException:
System.IO.IOException: процесс
не может получить доступ к файлу
'C: \ Users \ \ AppData \ Local \ empty.lfp'
потому что он используется другим
процесс ..