簡體   English   中英

在單元測試期間創建文件 - 無法打開它來寫入 - TestDriven.Net和NUnit

[英]Create File During Unit Test - Can't Open it to Write - TestDriven.Net and NUnit

我正在測試一些需要使用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竊取鎖? 我應該以不同方式創建此文件嗎? 我應該以其他方式編寫測試嗎?

在此先感謝您的答案和評論=)。

編輯:

解決這個特定的問題 (真正的問題,正如Dave Swersky提到的那樣,單元測試不應該接觸文件系統)我使用James Wiseman發送的鏈接(再次感謝James =)並使用FileShare標志創建文件,這樣我可以進入文件,打開它寫入它。 像這樣:

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

有了它,我可以打開並寫入文件。 =)

這可能不是您正在尋找的答案,但這正是您應該使用模擬而不是實際創建文件的原因。

這是一個用於模擬文件系統的現成解決方案: http//bugsquash.blogspot.com/2008/03/injectable-file-adapters.html

我注意到你直接使用FileStream對象來執行寫操作。

如果您創建StreamWriter對象,並將其用於文件操作(包括關閉),是否會出現同樣的問題?

谷歌搜索出現了這篇文章。 你會發現它很有用。 http://foson.blogspot.com/2007/10/closing-filestream-and-streamwriter-and.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM