簡體   English   中英

最佳實踐C#在測試中創建文件

[英]Best practices C# creating file in test

如何以及在哪里可以創建文件(在測試中),標准Windows 7/8平台上的每個人都可以使用和創建該文件?

因為當我嘗試使用時:

Directory.CreateDirectory(TEST_FILE_PATH);

我有一個UnauthorizedAccessException,因此可以更改我在計算機上的權限,但不能更改其他貢獻者的權限。

編輯:

好吧,您需要一些詳細信息。 我有一個接口,允許我收聽視頻流。 但是在測試中,我需要使用一個文件,將其讀取並存儲正在讀取的內容。 因此,我想測試文件中的所有數據是否正確存儲。

范例:

        ICarStorage carStorage = new CarFileStorage(FILE_PATH);
        List<Car> cars = carStorage.Load();
        // array which contains cars wrote in file
        int expected = CARS.Length;
        int actual = cars.Count;
        Assert.AreEqual(expected, actual);

“測試”實際上不應訪問文件。 您的API不應訪問文件。 誰知道,您的用戶可能沒有文件,或者可能不想使用文件,就像您在測試場景中一樣。

您需要某種抽象的東西來表示可以讀取或寫入的數據流。 在C#中,這稱為Stream 然后,您的API用戶可以決定僅使用RAM來傳遞文件流內存流 甚至來自套接字的網絡流 或您從未想到的任何其他種類。

我仍然不確定最適合您的需求,但是我會這樣說:

UnauthorizedAccessException最有可能是由在不同上下文中運行測試引起的,簡而言之,您可能使用的路徑並非所有運行測試的用戶都可以訪問。

假設您只有一個文件,不想花太多精力進行框架構建,那么您可以使用Path.Combine(Path.GetTempPath(), Path.GetTempFileName())來創建一個文件名。

我在大型應用程序中正在做什么:我永遠不會讓任何人直接訪問文件系統。 取而代之的是,我有一組通過依賴項注入使用的工具,可以完成所有文件訪問任務。 結果,我將永遠不必在測試中檢查文件,除了文件系統工具的測試之外,我可以將其全部模擬掉。

使用臨時文件夾。 例如,使用Path.GetTempFileName()

暫無
暫無

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

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