如何创建相对于目标项目而不是单元测试项目的路径?

时间:2015-09-15 05:39:51

标签: c# .net unit-testing

我有两个项目.NET Web API 2项目,MyProject和MyProject.Tests。 MyProject有一个settings.json文件,我用它来存储数据库凭据。我使用了自定义外部设置文件,因为数据库凭据包含的用户名和密码不应与其他设置捆绑在一起,并且是用户特定的。

我用ConfigManager()方法编写了一个GetDbConnectionString()类,该方法从外部文件读取数据库凭据并生成连接字符串。它使用位于项目目录中的配置文件的相对路径。这在正常执行期间工作正常,因为路径相对于MyProject。但是,在运行单元测试时,所有相对路径都与MyProject.Tests相关,并且无法找到正确的文件。我可以使用绝对路径,但我更希望将所有设置文件捆绑在项目目录中。

有没有办法可以让单元测试正确设置文件,而不会在单元测试项目中复制它而不使用绝对路径>

1 个答案:

答案 0 :(得分:-1)

您可能希望使用Directory.GetCurrentDirectory()System.Reflection.Assembly.GetExecutingAssembly().Location来到路径。

Directory.GetCurrentDirectory()将为您提供当前文件夹(这更像是一个上下文,因为您可以创建一个快捷方式并传递一个完全不同的文件夹作为当前目录而不是您的exe存在的文件夹。)

System.Reflection.Assembly.GetExecutingAssembly().Location将为您提供dll(或exe的路径,具体取决于编译选项)。

System.Reflection.Assembly.GetAssembly(typeof(ConfigManager)).Location;应该提供你想要的东西。

参考中的建议 How do I get the path of the assembly the code is in?