UWP单元测试中的文件处理

时间:2016-09-20 15:51:20

标签: unit-testing uwp

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

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

当我运行测试时,当测试尝试打开磁盘上的文件时,我会获得Access Denied异常。使用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(测试)应用程序在磁盘上以编程方式打开任意文件,您必须使用文件选择器来选择文件,然后打开它。

1 个答案:

答案 0 :(得分: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移动到root作为文件,并在测试后删除它)。它适用于我(VS 2017 UWP应用程序)所以它也适合你。