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.testsettings
, Deployment
菜单,并手动添加文件。
谢谢您的帮助! 我给了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"); } }
在需要xml文件的testing中考虑使用这个属性:
我一直在与部署属性搏斗一段时间,终于放弃了。 相反,我只是手动将我的文件复制到一个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了该文件名,并将属性设置为“始终复制”,我的一个文件也没有被复制到文件夹中。
以下步骤解决了我的问题:
- 打开testing菜单
- selecttesting设置
- select选项“selecttesting设置文件”
- 从“打开设置文件”窗口中select.testsettings文件
- 确保在testing – >testing设置下选中了.testsettings文件
希望这将有助于一个人。