Xml文件没有复制到测试输出目录

时间:2010-12-06 18:51:12

标签: c# unit-testing visual-studio-2010 c#-4.0

Visual Studio 2010,x64计算机,使用内置Web服务器通过使用内置测试框架的一组单元测试来托管WCF服务。

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

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

是否有办法强制复制此文件,或者我是否需要在测试中完全限定参考资格?

TIA!
詹姆斯


更新
我设置了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 忽略 { {1}} 完全属性,甚至没有尝试将文件复制到任何地方。在这种情况下,当我尝试打开它进行阅读时,我收到了“找不到文件”的异常。 Visual Studio为测试创建了一个临时工作目录,但其中只有一个文件,AgentRestart.dat。

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

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

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

TLDR: Visual Studio忽略了某些运行测试方法的DeploymentItem属性。解决方案是编辑DeploymentItemLocal.testsettings菜单,然后手动添加文件。

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

4 个答案:

答案 0 :(得分: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");
        }
    }

答案 1 :(得分:0)

答案 2 :(得分:0)

我一直在与部署属性进行一段时间的斗争,并最终放弃了。相反,我只是手动将我的文件复制到测试目录,然后在完成后删除它们:

测试文件位置:

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

我发现这很好用

答案 3 :(得分:0)

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

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

  1. 打开测试菜单
  2. 选择测试设置
  3. 选择选项“选择测试设置文件”
  4. 从“打开设置文件”窗口中选择.testsettings文件
  5. 确保在Test - &gt;下检查Selected .testsettings文件。测试设置
  6. 希望这会对某人有所帮助。