如何获取测试项目的构建目录?

时间:2012-06-20 10:17:12

标签: c# visual-studio

我有一个测试项目,我需要在其中加载XLSX文件。为此,我添加了一个带有copy-always的文件,以便它最终出现在build目录中,但以下所有内容都返回了错误的路径:

  1. System.Reflection.Assembly.GetAssembly(typeof(testclass)).Location;
  2. AppDomain.CurrentDomain.BaseDirectory
  3. Directory.GetCurrentDirectory();
  4. 他们都给了我:

    "C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestResults\\username_ICT003 2012-06-20 12_07_06\\Out"

    我需要

    "C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestProject\\bin\\Debug\\SupportFiles\\"

    我如何做到这一点?

4 个答案:

答案 0 :(得分:6)

使用DeploymentItemAttribute属性。引用MSDN:

此属性标识包含已部署的测试用于运行的文件的文件和目录。测试引擎制作部署项的副本,并根据指定的OutputDirectory或缺省目录将它们放在测试部署目录中。

例如:

[TestClass]
public class MyUnitTest
{
    [TestMethod()]
    [DeploymentItem("myfile.txt")]
    public void MyTestMethod()
    {          
        string file = "myfile.txt";           
        Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
            " did not get deployed");
    }
}

当然假设您使用MSTest作为测试框架。

答案 1 :(得分:5)

试试这个:

string dir = Path.Combine(
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
    "SupportFiles");

不要使用Directory.GetCurrentDirectory(),因为当前目录不能是您的exe目录,并且可能在程序执行期间发生变化。

答案 2 :(得分: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

答案 3 :(得分:1)

切换到 xUnit NUnit

然后选项2.,3和Environment.CurrentDirectory都可以根据需要工作,返回build-output-diretory。删除“bin \ Debug”或“bin \ Release”,文件可以保留为“不要复制”。

另请参阅ElasticSearch中的GetFileFromMethod - 方法和usage,以获得每次测试一个文件的好方法。