Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Visual studio 使用输入文件进行单元测试_Visual Studio_Unit Testing - Fatal编程技术网

Visual studio 使用输入文件进行单元测试

Visual studio 使用输入文件进行单元测试,visual-studio,unit-testing,Visual Studio,Unit Testing,全部: 我有一个单元测试,它测试需要输入文件的功能。此测试是使用VS2008的内置单元测试功能构建的 我的问题是,该文件需要通过单元测试来发现。但是,当测试运行时,它从测试结果文件夹下的临时“输出”目录运行。它找不到我的输入文件 我已经将该文件添加到单元测试项目中,编译操作为“none”,复制到输出目录选项为“copy if newer”,但复制发生在普通VS output目录(在bin下),而不是单元测试执行目录,因此找不到该文件。我不想硬编码文件的路径,因为测试应该为任何签出单元测试的人运行

全部: 我有一个单元测试,它测试需要输入文件的功能。此测试是使用VS2008的内置单元测试功能构建的

我的问题是,该文件需要通过单元测试来发现。但是,当测试运行时,它从测试结果文件夹下的临时“输出”目录运行。它找不到我的输入文件


我已经将该文件添加到单元测试项目中,编译操作为“none”,复制到输出目录选项为“copy if newer”,但复制发生在普通VS output目录(在bin下),而不是单元测试执行目录,因此找不到该文件。我不想硬编码文件的路径,因为测试应该为任何签出单元测试的人运行。我可以将输入文件放在解决方案文件夹中,让测试代码通过硬编码树上的相对路径来“发现”该文件,但我认为这是一个常见问题,因此我想检查是否缺少某些内容。

将该文件作为资源添加到测试程序集。然后,您可以在运行时通过测试设置中的Assembly.GetManifestResourceStream加载它

下面是我用来加载资源的一种方便方法:

public static class ResLoader
{        
    public static string AsString<T>(string resName)
    {
         using (var reader = new StreamReader(Assembly.GetAssembly(typeof(T))
                                .GetManifestResourceStream(resName)))
        {
            return reader.ReadToEnd();
        }
    }
}
公共静态类重新加载程序
{        
公共静态字符串AsString(字符串resName)
{
使用(var reader=newstreamreader(Assembly.GetAssembly(typeof(T))
.GetManifestResourceStream(resName)))
{
返回reader.ReadToEnd();
}
}
}

T是测试程序集中包含的任何类。

我通常模拟文件和数据库结果等外部资源,而不是在单元测试中尝试访问它们。这并不总是容易做到的。如果您向我们展示有问题的方法,我们可能会帮助您使其更易于单元测试。

您可以使用DeploymentItem属性来实现这一点。与此相关的警告有很多:

或者,您可以将该文件添加为资源并从中读取。那是我通常做的事