在单元测试期间检索本地路径

时间:2011-12-01 18:25:05

标签: c# file path

我正在创建一个c#类(Class.cs),需要从本地目录中按名称查找文件(FileINeedToFind.cs)。该目录与类文件位于不同的目录中。

文件夹结构:

Root  
   -> ClassFolder

      --> Class.cs

   -> FileFolder

      --> FileINeedToFind.cs

当我为该课程运行测试时,它总会返回测试结果路径。

如何让类获得自己的本地路径,而不是测试结果汇编的路径?

2 个答案:

答案 0 :(得分:3)

在MSTest中,测试(默认情况下)通过test deployment在包含代码的文件夹的不同文件夹中执行。您可以配置部署的内容,但我倾向于同意@Jacob,这不是您通常想要做的事情。

但是,我与@Jacob的不同之处在于如何在测试中获取当前目录。在MSTest中,正确的方法是使用TestContext.DeploymentDirectory

答案 1 :(得分:2)

当程序运行时,您应该假设某个对象不知道生成它的源代码。代码被编译成一个程序集,并在运行程序时加载该程序集,因此默认情况下“current”目录是执行程序集的位置。

简而言之,这不是你可以干净利落的事情。如果您的代码不依赖于源相关目录的概念,那将是最好的。如果您更改要查找的文件的构建操作,它可能会帮助您实现目标,以便将其复制到输出目录。然后该文件在运行时的相对路径应该镜像项目文件夹中的相对路径。

要获取执行程序集的路径(“当前”路径可能被任何其他正在执行的代码更改,因此最好不要依赖它),请使用以下代码:

System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase);