Создание файла во время модульного теста - не удается открыть его для записи - TestDriven.Net и NUnit

I ' m тестирует некоторый код, который должен использовать объект FileInfo и DirectoryInfo, и вместо того, чтобы писать оболочку и несколько интерфейсов для решения этой проблемы, я подумал, что было бы неплохо создать несколько файлов при запуске теста, а затем удалить эти файлы после того, как тест будет сделанный. Я создаю файлы следующим образом:

public static void CreateTestSchedules(int quantity)
{
    String folder = Path.Combine(Directory.GetCurrentDirectory(), "FolderFiles");
    for(int quantity=10; quantity > 0; quantity--)
    {
       String filename = Path.GetTempFileName();
       using (FileStream fileStream = File.Create(Path.Combine(folder, filename)))
       {
            XDocument fileContent = Helper.CreateContent(filename);
            Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(fileContent.ToString());

            fileStream.Write(bytes, 0, bytes.Length);
            fileStream.Flush();
            fileStream.Close();
        }
     }
}

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

Затем, когда выполнение теста продолжается, я попробуйте открыть один из этих файлов, чтобы что-то в нем записать, и я получаю исключение, указывающее, что файл, который я хочу открыть для записи, используется другим процессом, и после более подробной проверки я вижу процесс TestDriven.Net как тот, который блокирует файл. Это код, который я использую, чтобы открыть и попытаться записать данные в файл:

using (FileStream file = new FileStream(filename, FileMode.Append))
{
    Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(dataToWrite.ToString());
    if (file.CanWrite)
    {
        file.Write(bytes, 0, bytes.Length);
    }
}

Мой вопрос: почему это происходит? я не освобождаю дескриптор файла правильно? есть ли способ украсть блокировку с TestDriven.Net? я должен создавать эти файлы по-другому? должен ли я писать тест каким-то другим способом?

Заранее спасибо за ответы и комментарии =).

РЕДАКТИРОВАТЬ:

Чтобы решить ЭТО конкретную проблему (НАСТОЯЩАЯ проблема, как Дэйв Сверски упомянул об этом, заключается в том, что модульный тест НЕ ДОЛЖЕН ПРИКАСАТЬСЯ к файловой системе) Я использовал ссылку, отправленную Джеймсом Вайзманом (еще раз спасибо, Джеймс =), и создал файл с флагом FileShare, так я могу добраться до файла, открыть это напишите ему. Вот так:

 using (FileStream fileStream = new FileStream( filename, FileMode.Create, FileAccess.ReadWrite, **FileShare.ReadWrite**))

С его помощью я могу открыть и записать в файл. =)

5
задан Hugo 12 January 2011 в 16:43
поделиться