【问题标题】:File handling in UWP unit testsUWP 单元测试中的文件处理
【发布时间】:2018-01-12 06:18:18
【问题描述】:

我必须设置一些单元测试才能在 UWP 上运行。单元测试使用磁盘上的文件。文件位置配置为完整路径(例如 C:\Temp\)。

我在 Visual Studio 2015 中创建了一个单元测试应用程序,在应用程序清单中我检查了 Internet(客户端)、专用网络和可移动存储。我还为我的文件类型 (.dat) 设置了文件关联。

当我运行测试时,当测试尝试打开磁盘上的文件时,我会收到拒绝访问异常。这些文件是使用 FileStream 类打开的。
异常消息:测试方法 UnitTests.TestMethod1 抛出异常: System.UnauthorizedAccessException:对路径“C:\Temp\file.dat”的访问被拒绝。

如何设置测试应用程序以打开磁盘上的任意文件?

更新: 这是一个示例测试:

public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        // 1. Open the file using a FileStream
        FileStream fs = new FileStream("C:\\Temp\\file.dat", FileMode.Open, FileAccess.Read, FileShare.Read);

        // or
        // 2. Open the file using UWP file API
        Task<Stream> ts = GetStream();
        Stream s = ts.Result;
    }

    async private Task<Stream> GetStream()
    {
        Windows.Storage.StorageFile sf = await Windows.Storage.StorageFile.GetFileFromPathAsync("C:\\Temp\\file.dat");
        Stream s = await sf.OpenStreamForReadAsync();

        return s;
    }
}

目前,经过进一步研究,我认为无法从 UWP(测试)应用程序以编程方式打开磁盘上的任意文件,您必须使用文件选择器选择文件然后打开它。

【问题讨论】:

  • 您可以尝试抽象文件访问,以便您可以模拟它以进行单元测试
  • 显示minimal reproducible example 说明您尝试访问该文件的方式
  • 命中磁盘的单元测试很糟糕(速度慢、访问问题、不同操作系统上的故障)。如果你展示你的代码和测试,我们可以告诉你如何不撞到磁盘。
  • @zhon 我将单元测试框架用于涉及更复杂操作的自动化测试。测试代码进行图像处理。测试从磁盘加载图像,对图像进行一些处理,并将结果图像与也存储在磁盘上的参考图像进行比较。
  • @Surubelnita 所有这些都可以在你的 uwp 中抽象出来,以便在测试中实现和注入。

标签: unit-testing uwp


【解决方案1】:

我假设您需要固定的图片样本来测试您的应用。我会尝试将这些示例添加到单元测试应用程序的 Assets 文件夹中。然后为您要用于测试的 Assets 文件夹中的每个示例文件设置属性,以便 构建操作 = “内容”。这将在构建后将文件添加到 App 目录。然后你可以像这样访问你的文件:

StorageFolder assets = await Package.Current.InstalledLocation.GetFolderAsync("Assets");
StorageFile myTestFile = await assets.GetFileAsync("file1.jpeg");

这实际上确保了测试样本始终位于应用程序的沙箱中。

当然,如果您正在测试某种处理,您可以先在 [TestInitialize] 方法中将 Assets 中的文件复制到 App 的根文件夹中,然后在完成测试后在 [TestFinalize] 部分将其删除。我正在使用这种方法来测试 SQLite 数据库上的一些数据库操作(我将其作为文件从 Assets 移动到根目录,并在测试后将其删除)。它适用于我(VS 2017 UWP 应用),所以它也适用于你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2014-02-28
    相关资源
    最近更新 更多