Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Exists在UnitTest上下文中返回false_C#_Unit Testing - Fatal编程技术网

C# Exists在UnitTest上下文中返回false

C# Exists在UnitTest上下文中返回false,c#,unit-testing,C#,Unit Testing,我已经转储了一个文件,其中包含一些用于单元测试的数据。 当代码尝试加载该文件时,它会获取FileNotFoundException 数据和代码文件在同一文件夹中相邻 项目测试 data.xml data.cs 似乎测试项目需要在生成后将文件复制到bin/Debug文件夹中。仅当您将“复制到输出目录”属性设置为“始终复制”时,才会执行此操作。测试项目似乎需要在生成后复制bin/Debug文件夹中的文件。只有当您将“复制到输出目录”属性设置为“始终复制”时,才会执行此操作。我不知道这是否适合您

我已经转储了一个文件,其中包含一些用于单元测试的数据。 当代码尝试加载该文件时,它会获取FileNotFoundException

数据和代码文件在同一文件夹中相邻

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

似乎测试项目需要在生成后将文件复制到bin/Debug文件夹中。仅当您将“复制到输出目录”属性设置为“始终复制”

时,才会执行此操作。测试项目似乎需要在生成后复制bin/Debug文件夹中的文件。只有当您将“复制到输出目录”属性设置为“始终复制”

时,才会执行此操作。我不知道这是否适合您的目的,但我通常会将示例/数据/其他文件作为嵌入资源。如果您选择这样做,您仍然需要在解决方案资源管理器中设置文件的
生成操作
属性,但是您不需要担心文件在哪里或是否存在

下面是一个读取文件的示例方法。我建议更改该方法,以字符串、XDocument或其他更适合您的数据类型的格式返回数据
resource
将是文件的项目路径(即上面示例中的
project.Test.data.xml


我不知道这是否适合您的目的,但我通常会将示例/数据/其他文件作为嵌入式资源。如果您选择这样做,您仍然需要在解决方案资源管理器中设置文件的
生成操作
属性,但是您不需要担心文件在哪里或是否存在

下面是一个读取文件的示例方法。我建议更改该方法,以字符串、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];
}