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

本文关键字:路径 检索 单元测试 | 更新日期: 2023-09-27 18:16:44

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

文件夹结构:<>之前根-> ClassFolder——> Class.cs-> FileFolder——> FileINeedToFind.cs之前

当我为类运行测试时,它总是返回测试结果路径。

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

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

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

简而言之,这不是您可以干净地完成的事情。最好您的代码不依赖于源代码相对目录的概念。如果您更改正在查找的文件的构建操作,以便将其复制到输出目录中,则可以帮助您实现目标。然后,该文件在运行时的相对路径应该反映项目文件夹中的相对路径。

要获得执行程序集的路径("当前"路径可能被任何其他执行代码更改,所以最好不要依赖它),使用以下代码:
System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase);

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

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