文件.Exists在UnitTest上下文中返回false
本文关键字:返回 false 上下文 UnitTest Exists 文件 | 更新日期: 2023-09-27 18:03:36
我已经为UnitTesting转储了一个包含一些数据的文件。当代码试图加载文件时,它会得到FileNotFoundException。
数据和代码文件并排放在同一个文件夹中。
- 项目。测试
- data.xml
- data.cs
似乎测试项目需要在bin/Debug文件夹中的构建之后复制文件。只有当你将"Copy to Output Directory"属性设置为"Copy always"
我不知道这是否适合您的目的,但我经常将样本/数据/其他文件作为嵌入资源。如果你选择这样做,你仍然需要在解决方案资源管理器中设置文件的Build Action
属性,但是你不需要担心文件在哪里或者它是否存在。
下面是读取文件的示例方法。我建议将该方法更改为以字符串、XDocument或其他更合适的格式返回数据(如果它适合您的数据类型)。resource
将是该文件的项目路径(即上面示例中的Project.Test.data.xml
)。
private byte[] GetEmbeddedResourceBytes(string resource)
{
var asm = Assembly.GetExecutingAssembly();
using (var stream = asm.GetManifestResourceStream(resource)) {
if (stream != null) {
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream()) {
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
}
return new byte[0];
}