【发布时间】: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