首页 文章

UWP单元测试中的文件处理

提问于
浏览
1

我必须设置一些单元测试才能在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 回答

  • 1

    我假设你需要一个固定的图片样本来测试你的应用程序 . 我会尝试添加这些示例,让我们说单位测试应用程序的Assets文件夹 . 然后,对于要用于测试的Assets文件夹中的每个样本文件,设置属性,例如Build actions =“Content” . 这将在构建后将文件添加到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应用程序)所以它也适合你 .

相关问题