我必须设置一些单元测试才能在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 回答
我假设你需要一个固定的图片样本来测试你的应用程序 . 我会尝试添加这些示例,让我们说单位测试应用程序的Assets文件夹 . 然后,对于要用于测试的Assets文件夹中的每个样本文件,设置属性,例如Build actions =“Content” . 这将在构建后将文件添加到App目录 . 然后你可以像这样访问你的文件:
这实际上确保了测试样本始终位于应用程序的沙箱中 .
当然,如果您正在测试某种处理,您可以先在[TestInitialize]方法中将文件从Assets复制到App的根文件夹,并在完成测试后在[TestFinalize]部分中删除它们 . 我正在使用这种方法来测试SQLite数据库上的一些数据库操作(我将它从Assets移动到root作为文件,并在测试后删除它) . 它适用于我(VS 2017 UWP应用程序)所以它也适合你 .