2010-12-06 63 views
40

Visual Studio 2010 x64机器,使用内置的Web服务器使用内置的测试框架使用一组单元测试托管WCF服务。Xml文件不会复制到测试输出目录

我有一个XML文件,我的测试需要加载运行。我将这个文件包含在测试项目中,并将文件设置为'content'并且'始终复制到输出目录'。该文件很好地复制到bin \ debug目录。

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

有没有办法迫使这个文件复制,或者我需要从测试中完全限定的参考?

TIA!
詹姆斯


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

我的测试代码:

[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键(在目前情况下调试测试),视觉工作室忽略DeploymentItem属性完全的考验,甚至没有请尝试将文件复制到任何地方。在这种情况下,当我尝试将其打开以供阅读时,出现“文件未找到”异常。 Visual Studio为测试创建了一个临时工作目录,但其中只有一个文件AgentRestart.dat。

当我使用工具栏中的“运行单元测试”按钮(不确定测试选项是什么)运行测试时,Visual Studio没有将该文件复制过来,而是直接从项目目录中引用它。测试通过了,没有创建临时工作目录。

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

当我编辑Local.testsettings(位于我的tests文件夹下的Solution Items文件夹下)时,我从左侧菜单中选择了'Deployment',并添加了xml文件。它被添加为[解决方案目录] \ [项目目录] \ file.xml。我删除了DeploymentItem属性。现在我可以调试测试了;将xml文件和所有可执行文件复制到为测试创建的临时目录中。

TLDR:对于运行测试的某些方式,Visual Studio忽略DeploymentItem属性。解决方案是编辑Local.testsettings,Deployment菜单,并手动添加文件。

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

+3

真棒更新,你是一个绝对的明星!如果可以的话,我会加倍努力... – MalcomTucker 2011-05-07 10:34:45

+1

运行单元测试为我做了诀窍。好问题。谢谢 – 2012-06-06 19:08:25

回答

20

尝试使用DeploymentItem属性注释您的测试: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"); 
     } 
    } 
0

我一直在使用deploymentattribute摔跤一段时间,并有fi最后只是放弃了。相反,我只是手动复制我的文件转移到测试目录,然后删除它们一次完成:

TESTFILE地点:

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 

我发现这个效果很好

0

我正面临着这样的问题,即使我已经在local.testSettings中输入了该文件名并将属性设置为“始终复制”,我的一个文件并未被复制到文件夹中。

按照以下几个步骤已经解决了我的问题:

  1. 打开测试菜单
  2. 选择测试设置
  3. 选择选项“选择测试设置文件”
  4. 选择.testsettings文件从打开的设置文件窗口
  5. 确保所选的.testsettings文件在Test - > Test Settings下被选中

希望这会对一些人有所帮助。

相关问题