文件.Exists在UnitTest上下文中返回false

本文关键字:返回 false 上下文 UnitTest Exists 文件 | 更新日期: 2023-09-27 18:03:36

我已经为UnitTesting转储了一个包含一些数据的文件。当代码试图加载文件时,它会得到FileNotFoundException。

数据和代码文件并排放在同一个文件夹中。

  • 项目。测试
    • data.xml
    • data.cs

文件.Exists在UnitTest上下文中返回false

似乎测试项目需要在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];
}