在单元测试期间获取引用项目的路径
Posted
技术标签:
【中文标题】在单元测试期间获取引用项目的路径【英文标题】:Get path of referenced project during unit testing 【发布时间】:2013-06-23 05:22:26 【问题描述】:我正在尝试使用单元测试在我的 (ASP.Net) Web 应用程序中测试一个类的功能。此类从硬盘驱动器加载一些文件(以执行 xsl 转换):
Xsl = GetXSLFromFile(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt")
此路径在 Web 应用程序本身的调试过程中被正确解析。但是每当我开始单元测试(它驻留在一个单独的测试项目中,引用 Web 应用程序的项目)时,我都会得到测试项目的路径。
在这种情况下是否可以获取 Web 应用程序的路径,还是我必须使用不同的方法? 任何提示表示赞赏。
【问题讨论】:
【参考方案1】:我建议你这样做:
public class MyXslFileLoader
public void Load()
Load(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt");
public void Load(string path)
Xsl = GetXSLFromFile(path);
您可以在 Web 应用程序中调用 Load()
,但在您的单元测试应用程序中使用此方法的重载版本。您可以考虑将 xslt 文件作为资源添加到您的项目中。
你可以像这样加载路径:
var webApplicationDllPath = Path.GetDirectoryName(typeof(ClassInTheWebApplicationDll).Assembly.GetName().CodeBase);
【讨论】:
是的,这可能是可行的。唯一的缺点是,我必须在每个父方法中使用路径参数。也许我必须重新考虑我的类实例化,并提供通过构造函数的路径。 这有什么缺点吗?您可以使基类包含方法重载并在那里实现它们。此外,理论上Path.GetDirectoryName
的例子就足够了
Path.GetDirectoryName 示例也返回测试项目的路径。我的意思是,从测试项目中的调用到在 web 应用程序中加载文件的方法,调用堆栈中的每个方法都必须获取该参数。类似于 class.LoadXsl(path) -> class.LoadXsl2(path) -> class.Load(path) .
该类位于 webapplication 项目中。但是因为测试项目引用了这个项目,所以将webapplication的dll复制到了测试项目的debug文件夹中。我认为,在这种情况下,在运行时获取 Web 应用程序的路径可能是不可能的。【参考方案2】:
string path;
path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
HOW TO: Determine the Executing Application's Path
Getting the path of a executable file in C#
希望这有帮助.. :)
【讨论】:
正在执行的程序集将是 unittest 项目。你会走错路。 嗨。它通常很有帮助,因为它给出了实际执行程序集的路径。 :) 但在我的情况下,它还返回测试项目的子文件夹。我需要的是类所在的路径之类的。【参考方案3】:好的,这给出了提示:Can a unit test project load the target application's app.config file?
在 .testsettings 文件中,由测试项目添加到我的 web 应用程序项目中,我可以添加文件和文件夹,每次执行测试时应将其复制到测试项目调试文件夹中。
所以在此之后我可以引用每个 AppDomain.CurrentDomain.BaseDirectory 的 xsl 文件。
此外,为了保持文件夹结构,我必须执行此处描述的操作: Visual Studio Test Project - Does not copy folder on deployment
我必须使用文本编辑器编辑 .testsettings 文件,并添加 outputDirectory 参数。之后我重新启动了 Visual Studio,并在启动测试项目时正确复制了文件夹和文件。
【讨论】:
以上是关于在单元测试期间获取引用项目的路径的主要内容,如果未能解决你的问题,请参考以下文章
在 Unity3d 的 Unity Test Runner 中的单元测试期间加载文件