Xml文件不能复制到testing输出目录

Visual Studio 2010,x64机器,使用内置的Web服务器来托pipe一个使用内置testing框架进行unit testing的WCF服务。

我有一个XML文件,我的testing需要加载运行。 我将这个文件包含在testing项目中,并将文件设置为“内容”,并且“始终复制到输出目录”。 此文件复制到bin \ debug目录罚款。

但是,当我执行testing时,xml文件不在那里。 它不是在项目的bin \ debug文件夹中查找,而是在testing的工作目录C:\ Projects \ SAP Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out中查找它。 。

有没有办法强制这个文件复制,还是我需要从testing内完全限定参考?

TIA!
詹姆士

更新
我设置了DeploymentItem属性,但该文件仍然不会被复制。 但是,这看起来像我想要的…任何想法,为什么这是行不通的?

我的testing代码:

 [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的进程监视器,看看它在寻找我的XML文件。 这是我发现的:

当我使用ctrl + r,ctrl + t(在当前上下文中debuggingtesting)运行testing时, Visual Studio 完全 忽略 DeploymentItem 属性 ,甚至没有尝试将文件复制到任何地方。 在这种情况下,当我尝试打开它来阅读时,出现“File Not Found”exception。 Visual Studio为testing创build了一个临时工作目录,但只有一个文件,即AgentRestart.dat。

当我使用工具栏中的“运行unit testing”button运行testing(不知道是什么testing选项)时,Visual Studio没有复制文件,而是直接从项目目录中引用它。 testing通过,没有创build临时工作目录。

当我从菜单选项“运行 – >在当前上下文中testing”(运行,而不是debugging)运行testing时,创build了一个临时工作目录,并将xml文件和所有可执行文件复制到它。 testing通过了。

当我编辑Local.testsettings(在我的tests文件夹下的Solution Items文件夹下)时,我从左侧菜单中select了“Deployment”,并添加了xml文件。 它被添加为[解决scheme目录] \ [项目目录] \ file.xml。 我删除了DeploymentItem属性。 现在我可以debuggingtesting了; 将xml文件和所有可执行文件复制到为testing创build的临时目录中。

TLDR: Visual Studio忽略DeploymentItem属性的特定方式来运行testing。 解决scheme是编辑Local.testsettingsDeployment菜单,并手动添加文件。

谢谢您的帮助! 我给了CPedros他的回答,因为这是解决这个问题最有帮助的。

尝试使用DeploymentItem属性注释您的testing: http : //msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=VS.100).aspx

以下是文档中的代码片段:

  [TestClass] public class UnitTest1 { [TestMethod()] [DeploymentItem("testFile1.txt")] public void ConstructorTest() { // Create the file to deploy Car.CarInfo(); string file = "testFile1.txt"; // Check if the created file exists in the deployment directory Assert.IsTrue(File.Exists(file), "deployment failed: " + file + " did not get deployed"); } } 

我一直在与部署属性搏斗一段时间,终于放弃了。 相反,我只是手动将我的文件复制到一个testing目录,然后删除完成后:

testing文件位置:

 Private _locationOfTestFilesToBeCopied As String = "C:\...\TestFilesToBeCopied" Private _locationOfTestFiles As String = "C:\...\TestFiles" 

初始化方法:

 <TestInitialize()> Public Sub Setup() DeleteCopiedTestFiles() CopyTestFilesToTestDirectory() End Sub 

复制和删除方法:

 Private Sub CopyTestFilesToTestDirectory() Dim sourceDirectory As New DirectoryInfo(_locationOfTestFilesToBeCopied) For Each fileInfo As FileInfo In sourceDirectory.GetFiles fileInfo.CopyTo(_locationOfTestFiles & "\" & fileInfo.Name, True) Next sourceDirectory = Nothing End Sub Private Sub DeleteCopiedTestFiles() Dim sourceDirectory As New DirectoryInfo(_locationOfTestFiles) For Each fileInfo As FileInfo In sourceDirectory.GetFiles fileInfo.Delete() Next sourceDirectory = Nothing End Sub 

我发现这个效果很好

我面临的问题是,即使我已经在local.testSettings中input了该文件名,并将属性设置为“始终复制”,我的一个文件也没有被复制到文件夹中。

以下步骤解决了我的问题:

  1. 打开testing菜单
  2. selecttesting设置
  3. select选项“selecttesting设置文件”
  4. 从“打开设置文件”窗口中select.testsettings文件
  5. 确保在testing – >testing设置下选中了.testsettings文件

希望这将有助于一个人。