【问题标题】:.NET: Getting the absolute path for a file when running VS Team Test.NET:运行 VS Team Test 时获取文件的绝对路径
【发布时间】:2009-03-27 08:01:45
【问题描述】:

目前我在 C:\Projects\TestProject\TestClass.cs 中有一个名为 TestClass.cs 的测试类
我在 C:\Projects\TestProject\config\config.xml 中也有一个 Xml 文件

在 TestClass.cs 中,我有一个从文件系统加载 Xml 的测试方法,如下所示:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Path.Combine(Assembly.GetExecutingAssembly().Location, "config\config.xml"));

不幸的是,Location 属性给了我这个值:
C:\Projects\TestProject\TestResults\klaw_[computernamehere] [time here]\

而不是我想要的,它是 C:\Projects\TestProject\

我也尝试过 Assembly.GetExecutingAssembly().CodeBase,结果相似。

有什么想法吗?

【问题讨论】:

    标签: c# .net visual-studio-2008 unit-testing


    【解决方案1】:

    如果您使用 MSTest,则需要使用 DeploymentItemAttribute 标记此文件。这意味着它将与 DLL 一起复制。

    【讨论】:

    • 我添加了DeploymentItemAttribute并传入了xml文件的路径,在单元测试中直接加载,不用担心路径。那行得通:)
    【解决方案2】:

    既然这是一个测试,那么让文件成为嵌入式资源怎么样?然后,您可以使用以下代码在运行时读取嵌入的资源:

    Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);
    

    资源通常是命名空间 + 文件名。但是你可以通过运行来解决这个问题 调试器中的以下代码:

    AssemblyGetExecutingAssembly().GetManifestResourceNames();
    

    这会返回一个嵌入资源的列表。

    【讨论】:

      【解决方案3】:

      嗯,它说的是实话。与 NUnit / TestDriven.NET 等不同 - MSTest 将内容复制到每个测试的不同文件夹中。这是(IMO)一个痛苦 - 例如,您需要属性文件包含([DeploymentItem]),或在 testrunco​​nfig 中指定它们(属性 -> 部署 -> 添加文件...)。

      将此与 TestDriven.NET 进行对比,您可以在其中使用“复制到输出目录”标志。

      【讨论】:

        【解决方案4】:

        除了使用 [DeploymentItem] 标记项目之外,您还需要确保您的测试运行配置已选中启用部署以及从中获取项目的目录。

        【讨论】:

          猜你喜欢
          • 2012-04-24
          • 2010-09-18
          • 2016-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-11
          相关资源
          最近更新 更多