使用内置的Web服务器在Visual Studio 2010上的x64机器上托管WCF服务,并使用内置测试框架运行一组单元测试。
我有一个XML文件,我的测试需要加载以运行。 我已将该文件包含在测试项目中,并将文件设置为“内容”和“始终复制到输出目录”。 这个文件可以成功地复制到bin \ debug目录中。
然而,当我执行测试时,xml文件并不在那里。 它不是在项目的bin \ debug文件夹中查找,而是在测试的工作目录C:\ Projects \ SAP Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out中查找。 文件还没有被复制到那里。
有没有办法强制复制这个文件,或者我需要从测试内部完全引用该文件?
TIA!
James
更新
我设置了DeploymentItem
属性,但该文件仍未复制。 但那看起来就像我想要的...有什么想法为什么它不起作用?
我的测试代码:
[TestMethod]
[DeploymentItem("SAP - GS3 format.xml")]
public void TestProcessSapRoles() {
// I get a 'file not found' error here, and when
// I check the output directory, it isn't there
XElement rolesRoot = XElement.Load("SAP - GS3 format.xml");
}
答案:
感谢CPedros的帮助,让我能更加深入地了解这个问题。我使用SysInternals的Process Monitor来查看它在哪里寻找我的xml文件。以下是我的发现:
当我使用ctrl+r,ctrl+t(在当前上下文中调试测试)运行测试时,Visual Studio完全忽略了DeploymentItem
属性,并且甚至没有尝试将文件复制到任何位置。在这种情况下,当我尝试打开它进行读取时,我会得到“文件未找到”的异常。Visual Studio为测试创建了一个临时工作目录,但其中只有一个文件AgentRestart.dat。
当我使用工具栏中的“运行单元测试”按钮(不确定是哪个测试选项)运行测试时,Visual Studio没有复制文件,而是直接从项目目录引用它。测试通过,没有创建临时工作目录。
当我从菜单选项“运行 -> 在当前上下文中运行测试”(运行,而不是调试)运行测试时,将创建一个临时工作目录,并将xml文件和所有可执行文件复制到其中。测试通过。
当我编辑Local.testsettings(在我的测试文件夹下的Solution Items文件夹下),我选择左侧菜单中的“Deployment”,并添加了xml文件。它被添加为[solution directory]\[project directory]\file.xml。我删除了DeploymentItem
属性。现在我可以调试测试了;xml文件和所有可执行文件都被复制到为测试创建的临时目录中。
简而言之:Visual Studio会忽略某些运行测试的方式中的DeploymentItem
属性。解决方案是编辑Local.testsettings
,进入Deployment
菜单,并手动添加文件。
感谢帮助!我将给予CPedros答案的荣誉,因为他的回答对于解决这个问题最有帮助。