MSTest复制文件以测试运行文件夹

Aar*_*ell 106 mstest visual-studio

我有一个测试,需要读入XML文件然后进行解析.如何将此文件每次复制到测试运行文件夹中?

XML文件设置为"如果更新则复制"和编译模式为"无"(因为它不是真正可编译的东西)

Pre*_*gha 128

使用DeploymentItem属性

using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CarMaker;

namespace DeploymentTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod()]
        [DeploymentItem("testFile1.xml")]
        public void ConstructorTest()
        {
            string file = "testFile1.xml";
            Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
                " did not get deployed");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 继Thomas的评论之后,RelativePathRoot的默认值是解决方案文件夹,所以如果你的解决方案看起来像这样(..\SolutionFolder\TestProject\TestData\aFile.txt)你的DeploymentItem看起来像这样..([DeploymentItem(@) "TestProject\TestData\aFile.txt","TestData")])..并且您将使用此参考测试中的文件..(string file = @"TestData\aFile.txt";) (30认同)
  • 不要忘记,如果您的子文件夹中的项目也包含在部署子目录中的项目[DeploymentItem("SubFolder\testFile1.xml","SubFolder")] (22认同)
  • DeploymentItem属性也可以在类级别指定,以影响类中的每个测试. (16认同)
  • 我所看到的大多数帖子都没有提到,如果你不能让它工作,你可能需要选中"启用部署"复选框,如果你去测试 - >编辑测试设置 - > local(local.testsettings) - >部署选项卡.我刚刚做了这个,然后DeploymentItem工作正常. (12认同)
  • [VS2010的DeploymentItemAttribute文档](http://msdn.microsoft.com/en-us/library/ms245570.aspx):_此属性可以在测试方法或测试类上指定._ (5认同)
  • 很好的答案,帮助我做了一些功能测试. (2认同)
  • 但是类级别const只是那个呃? (2认同)

小智 25

似乎如果您为解决方案提供TestSettings文件,那么您可以取消选中"启用部署"选项并阻止mstest尝试...TestResults\...\out从不复制您的额外文件的文件夹运行(除非您将它们作为部署选项) .

如果依赖于保留文件夹结构中的额外文件,这也很有用,因为如果使用TestSettings中的Deployment,Add Folder选项,则部署项似乎都直接(平面)复制到临时运行文件夹(out)中(上面的答案表明,如果将每个项目添加为自己的DeploymentItem,则可以保留结构.

对我来说,它直接在Visual Studio中运行良好的测试(即我的结构中的额外文件被测试找到并使用),因为我很久以前就已经创建了一个TestSettings文件(其中包含启用部署未选中),但是在TeamCity时没有运行mstest来运行测试,因为我没有指定应该使用TestSettings文件.

要在Visual Studio中创建TestSettings文件,请右键单击Solution并选择New Item,然后选择TestSettings模板.要在mstest.exe的命令提示符下使用TestSettings文件,请添加选项,/testsettings:C:\Src\mySolution\myProject\local.testsettings (或在TeamCity中添加为具有适当路径的额外命令行选项)


Eri*_*sot 8

Preet答案用于为单个测试部署项目.如果要在解决方案级别执行此操作,请使用.testrunco​​nfig设置.

  • VS2010版本:http://msdn.microsoft.com/en-us/library/ms182475%28v=VS.100%29.aspx (2认同)

Fra*_*ood 5

对我来说最好的解决方案是使用测试设置,特别是如果多个测试需要相同的数据文件。

首先创建一个testsettings文件,并添加你需要的部署项(文件或文件夹名称):

<TestSettings name="Local" id="00ebe0c6-7b64-49c0-80a5-09796270f111" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment>
    <DeploymentItem filename="Folder1\TestScripts\test.xml" outputDirectory="TestScripts"/>
    <DeploymentItem filename="Folder2\TestData\" outputDirectory="TestData"/>
  </Deployment>
<...../>
Run Code Online (Sandbox Code Playgroud)
  • 在 Visual Studio 中运行,使用“测试\测试设置”菜单中的“选择测试设置文件”来选择新的测试设置

  • 运行 mstest,使用 /testsettings 参数让 mstest 使用您的测试设置。