【问题标题】: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 应用程序的路径,还是我必须使用不同的方法? 任何提示表示赞赏。

【问题讨论】:

    标签: c#


    【解决方案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,并在启动测试项目时正确复制了文件夹和文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-10
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 2014-07-01
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多