如何在 C# .NET 集成测试中在运行时找到物理路径?

15 浏览
0 Comments

如何在 C# .NET 集成测试中在运行时找到物理路径?

这个问题已经有了答案:

如何获取代码所在集合的路径?

为了在旧的遗留进程周围包装积分测试 (integration test),该测试基于某些输入生成详细文件,我需要提供文件的完整路径动态加载 DLL。

这个测试将在许多不同的开发人员机器上运行,这些机器并不总是共享相同的物理应用程序目录,但也将在许多服务器上运行,因为它通过持续集成过程,有时会有多个应用程序实例在同一台物理机器上运行。

重要的是,没有可以依赖于硬编码到这个测试中的标准路径。我真正需要的是一些机制,可以告诉我在执行它的时候测试正在执行的物理路径,然后我可以使用从那里开始的相对路径来始终可靠地找到安装中 DLL。

由于这是一个测试,我不能依赖像HttpContext.Current.Server.MapPath()或Request.ApplicationPath这样的东西,因为在测试运行时,Current将为空。

除了编写一个黑客来将我需要动态加载的 DLL 部署到任何驱动器的根目录的特殊文件夹中,以便可能构建和运行应用程序,有没有人知道一个好的 .NET 策略来在运行时找到测试的物理路径?

我正在使用 C# Web 应用程序中的 NUnit,以及批准测试样式的断言,因此需要执行此操作的简单测试如下:

[Test]
public void ShouldGenerateFileConsistently()
{
    string pathToDll = FindRelativePathToDllBasedOnPhysicalPath(); // <-- what I need to figure out
    string generatedFileContents = OutputManager.GenerateReportUsingDynamicDll(pathToDll);
    Approvals.Verify(generatedFileContents);
}

admin 更改状态以发布 2023年5月20日
0
0 Comments
var codebase = Assembly.GetExecutingAssembly().CodeBase;
var pathUrlToDllDirectory = Path.GetDirectoryName(codebase);
var pathToDllDirectory = new Uri(pathUrlToDllDirectory).LocalPath;

的中文意思是:加粗的123。

0