.NET:运行VS Team Test时获取文件的绝对路径

时间:2009-03-27 08:01:46

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

目前我在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] [这里的时间] \

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

我已经尝试过Assembly.GetExecutingAssembly()。CodeBase以及类似的结果。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

由于这是一个测试,如何使文件成为嵌入式资源?然后,您可以使用以下代码在运行时读取嵌入的资源:

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

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

AssemblyGetExecutingAssembly().GetManifestResourceNames();

返回嵌入资源列表。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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