我用UnitTesting的某些数据转储了一个文件。 当代码尝试加载文件时,它会得到FileNotFoundException。File.Exists在UnitTest上下文中返回false
数据和代码文件在同一文件夹中彼此相邻。
- Project.Test
- data.xml中
- data.cs
我用UnitTesting的某些数据转储了一个文件。 当代码尝试加载文件时,它会得到FileNotFoundException。File.Exists在UnitTest上下文中返回false
数据和代码文件在同一文件夹中彼此相邻。
看来,测试项目需要在bin /调试编译后的文件复制夹。只有当您将“复制到输出目录”属性设置为“复制始终”。
我不知道这是否适合您的目的,但我经常会将样本/数据/其他文件包含为嵌入式资源。如果您选择这样做,您仍然需要在解决方案资源管理器中的文件上设置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];
}
我只想指出,如果你正在从磁盘读取,你不写一个单元测试。单元测试在内存中运行,所有外部资源应该使用测试双抽象(自制或通过框架) – kai