最佳实践C#在测试中创建文件

时间:2015-04-18 11:10:59

标签: c# .net file

我如何以及在何处创建一个文件(在测试中),可以由标准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);

3 个答案:

答案 0 :(得分:4)

“测试”实际上不应该访问文件。您的API不应该访问文件。谁知道,您的用户可能没有文件或者可能不想使用文件,就像您在测试场景中一样。

您需要一些抽象来代表您可以读取或写入的数据流。在C#中,这称为Stream。然后,您的API用户可以决定仅使用RAM传入file streammemory stream。甚至是来自套接字的network stream。或者你从未想过的任何其他类型。

答案 1 :(得分:1)

我仍然不确定什么最适合你的需求,但我会这样说:

UnauthorizedAccessException很可能是由于测试在不同的上下文中运行造成的,简而言之,您可能正在使用的路径并非所有运行测试的用户都可以访问。

让我们假设您只有这个单一文件,并且不想花费太多精力进行框架化,那么您可以自己创建一个Path.Combine(Path.GetTempPath(), Path.GetTempFileName())文件名。

我在更大的应用程序中正在做什么:我永远不会让任何人直接访问文件系统。相反,我有一组通过依赖注入使用的工具,它们可以完成所有文件访问。因此,我将永远不必检查测试中的文件,我可以将其全部模仿,当然除了文件系统工具的测试之外。

答案 2 :(得分:0)

使用临时文件夹。例如,使用Path.GetTempFileName()

相关问题