目前我在C:\ Projects \ TestProject \ TestClass.cs中有一个名为TestClass.cs的测试类
我在C:\ Projects \ TestProject \ config \ config.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以及类似的结果。
有什么想法吗?
答案 0 :(得分:2)
如果您正在使用MSTest,则需要使用DeploymentItemAttribute标记此文件。这意味着它将与DLL一起复制。
答案 1 :(得分:2)
由于这是一个测试,如何使文件成为嵌入式资源?然后,您可以使用以下代码在运行时读取嵌入的资源:
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);
资源通常是命名空间+文件名。但你可以通过运行来解决这个问题 调试器中的以下代码:
AssemblyGetExecutingAssembly().GetManifestResourceNames();
返回嵌入资源列表。
答案 2 :(得分:1)
嗯,这是说实话。与NUnit / TestDriven.NET等不同--MSTest将每个测试复制到不同的文件夹中。哪个(IMO)很痛苦 - 例如,您需要将文件属性包括在内([DeploymentItem]
),或者在testrunconfig中指定它们(属性 - >部署 - >添加文件...)。 / p>
将此与TestDriven.NET对比,您可以在其中使用“复制到输出目录”标记。
答案 3 :(得分:1)
除了使用[DeploymentItem]标记项目之外,您还需要确保测试运行配置已选中“启用部署”以及从中获取项目的目录。