C# 编写单元测试:如何以编程方式使用testfiles获取文件夹

C# 编写单元测试:如何以编程方式使用testfiles获取文件夹,c#,visual-studio,unit-testing,directory,mstest,C#,Visual Studio,Unit Testing,Directory,Mstest,我正在visual studio 2010中编写单元测试。 为了测试某些功能,我添加了一个包含testfiles的文件夹。 我需要以编程方式获取此文件夹,而不需要字符串中的硬路径 文件夹包含在/TestFiles 我已尝试使用AppDomain.CurrentDomain.BaseDirectory。 只有在使用resharper运行单元测试时,这才有效。 结果是/bin/debug,所以我可以轻松地转到测试文件 如果使用visual studio运行测试,则BaseDirectory为: \T

我正在visual studio 2010中编写单元测试。
为了测试某些功能,我添加了一个包含testfiles的文件夹。
我需要以编程方式获取此文件夹,而不需要字符串中的硬路径

文件夹包含在
/TestFiles

我已尝试使用AppDomain.CurrentDomain.BaseDirectory。 只有在使用resharper运行单元测试时,这才有效。
结果是
/bin/debug
,所以我可以轻松地转到测试文件

如果使用visual studio运行测试,则BaseDirectory为:
\TestResults\\uout

我已将解决方案文件移动到另一个文件夹。因此,我的项目与我的解决方案文件不在同一文件夹中。
示例:
=C:\SolutionFiles

=C:\Projects\MyProject

有人能告诉我如何在不使用硬编码字符串的情况下获取测试文件的路径吗

编辑
我还没有找到解决办法。
Visual Studio正在使用另一个生成文件夹进行测试。 因此,通常构建到bin文件夹中的所有内容都将构建到另一个文件夹中进行测试

我的临时解决方案
我在测试项目中添加了App.config文件。 在此配置文件中,我添加了一个设置,其中包含测试文件所需的路径:

<appSettings>
  <add key="TestFiles" value="C:\Projects\MyProject\TestFiles"/>
</appSettings>

我们这样做:

var assembly = Assembly.GetAssembly(this.GetType());
var codebase = assembly.CodeBase.Replace("file:///", "");
var baseDir = Path.GetDirectoryName(codebase);
此C#代码片段来自单元测试设置例程并检索单元测试代码的目录。从这里你可以导航。。。
我不认为它很优雅……但是:)

您可以使用
Path.Combine(Assembly.GetExecutingAssembly().Location,“TestFiles”)
来访问该文件夹,而无需硬编码。您必须确保已将文件夹和文件添加到测试项目中,并已适当设置其
CopyToOutput
目录。

您可以使用该属性将此文件夹复制到单元测试的部署文件夹中。

最可靠的方法是使用TestContext。此对象具有部署路径、结果路径等的全部属性。请参阅。

即使问题已经得到回答,我也希望提供一个对我有效的解决方案,其他解决方案则不然。 您需要将该文件复制到测试项目的bin目录,并在其属性copy to output directory=“copy always”中标记该文件,然后在测试中,您可以使用以下代码读取该文件:

var baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var testFile = Path.Combine(baseDir, "TestFiles", "file.txt");

var file = File.OpenRead(testFile))

如果有像我这样的人出现,如果您使用的是.testsettings文件,并且类上的DeploymentItem属性不起作用,即使您已将文件设置为内容并始终复制,这是因为您的.testsettings文件中已经有一个部署部分,或者您需要在.testsettings文件中使用DeploymentItem。下面是我们现在的样子:

<Deployment>
    <DeploymentItem filename="Tests\Unit Tests\ConnectionStrings.config" />
    <DeploymentItem filename="Tests\Unit Tests\<project dir>\bin\Debug\TestFiles\" outputDirectory="TestFiles" />
</Deployment>

一个做一个文件,另一个做一个目录中的13个文件。注意目录的“文件名”后面的斜杠

有关解决方案和更多信息,请访问:


谢谢您的回答,但此代码将引用C:\Projects\TestResults\ Out文件夹,而不是项目文件夹(C:\Projects\UnitTest\CompressionTest)。因此,我需要开发单元测试的项目文件夹,而不是VisualStudio仅为单元测试复制assemby文件的文件夹?不管怎样,看看:好肉汁,有很多不同的方法!难道不应该有一个简单的,权威的方法来做这件事吗?这正是我想要的。谢谢位置返回完整路径,包括测试DLL的名称。您需要使用Path.GetDirectoryName()来获取路径。