编写单元测试:如何以编程方式获取带有测试文件的文件夹

时间:2010-12-24 12:00:48

标签: c# visual-studio unit-testing directory mstest

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

该文件夹包含在<projectDirectory>/TestFiles

我曾尝试使用AppDomain.CurrentDomain.BaseDirectory。 这只有在我用resharper运行我的单元测试时才有效 结果是<projectDirectory>/bin/debug所以我可以很容易地去TestFiles。

如果我使用visual studio运行测试,BaseDirectory是:
<sameFolderAsSolutionFile>\TestResults\<username>_<pcname> <datatime>\Out

我已将解决方案文件移至另一个文件夹。所以我的项目与我的解决方案文件不在同一个文件夹中 例如:
<sameFolderAsSolutionFile> = C:\SolutionFiles
<projectDirectory> = C:\Projects\MyProject

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

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

MY TEMP-SOLUTION
我在我的测试项目中添加了一个App.config文件。 在此配置文件中,我添加了一个包含测试文件所需路径的设置:

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

6 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:11)

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

答案 2 :(得分:11)

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

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

var file = File.OpenRead(testFile))

答案 3 :(得分:4)

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

答案 4 :(得分:2)

我们这样做:

var assembly = Assembly.GetAssembly(this.GetType());
var codebase = assembly.CodeBase.Replace("file:///", "");
var baseDir = Path.GetDirectoryName(codebase);

此C#代码段来自单元测试设置例程,并检索单元测试代码的目录。从这里你可以导航...... 我不认为它非常优雅......但是:)

答案 5 :(得分:1)

如果有人这样的话,如果您使用的是 .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个文件。注意目录的“文件名”的尾部斜杠!

解决方案和更多信息发现于:

MsTest DeploymentItem OutputDirectory in testsettings