c# - 如何在运行时查找 C# .NET 集成测试内部的物理路径?

标签 c# .net unit-testing assembly-loading

为了围绕基于某些输入构建详细文件的旧遗留流程进行集成测试,我需要通过提供文件的完整路径来动态加载 DLL。

此测试将在许多不同的开发人员计算机上运行,​​这些计算机并不总是共享相同的物理应用程序目录,但也会在通过持续集成过程时在许多服务器上运行,有时应用程序的多个实例将运行运行在同一台物理机器上。关键是,没有可以依赖的标准路径来硬编码到此测试中。我真正需要的是某种机制,可以告诉我测试在执行时正在执行的物理路径,然后我可以使用那里的相对路径来始终可靠地在应用程序的安装中找到 DLL。

由于这是在测试中,因此我不能依赖 HttpContext.Current.Server.MapPath() 或 Request.ApplicationPath 之类的东西,因为测试运行时 Current 将为 null。

缺少编写部署 DLL 的 hack,我需要动态加载到可能构建和运行应用程序的任何驱动器根目录上的特殊文件夹,有谁知道一个好的 .NET 策略来查找 DLL 的物理路径在运行时测试?

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

[Test]
public void ShouldGenerateFileConsistently()
{
    string pathToDll = FindRelativePathToDllBasedOnPhysicalPath(); // <-- what I need to figure out

    string generatedFileContents = OutputManager.GenerateReportUsingDynamicDll(pathToDll);

    Approvals.Verify(generatedFileContents);
}

最佳答案

var codebase = Assembly.GetExecutingAssembly().CodeBase;
var pathUrlToDllDirectory = Path.GetDirectoryName(codebase);
var pathToDllDirectory = new Uri(pathUrlToDllDirectory).LocalPath;

关于c# - 如何在运行时查找 C# .NET 集成测试内部的物理路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24249335/

相关文章:

java - JUnit 测试预期异常的正确方法

c# - OutOfMemoryException加载xml文档winmo 6.1

c# - SharpSVN.DLL - C#.NET - 在 Windows 应用程序中获取 SVN 存储库

c# - 锁定集合与 syncRoot 相比有什么缺点吗?

.net - 从模型更新数据库(当模型更改时)?

.net - RESTLET 的 C# 或 .Net 客户端

unit-testing - Grails测试中的模拟配置

c# - 如果其他构造函数创建它,我应该处置通过构造函数传递的对象吗?

c# - 在这种情况下我将如何使用 LINQ2XML?

android - 如何避免 Android 测试应用程序中的代码重复?