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

时间:2009-03-16 02:49:20

标签: visual-studio mstest

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

XML文件设置为“Copy if newer”,编译模式为“none”(因为它不是真正可编译的东西)

6 个答案:

答案 0 :(得分:125)

使用DeploymentItem attribute

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");
        }
    }
}

答案 1 :(得分:24)

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

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

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

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

答案 2 :(得分:8)

Preet答案用于为单个测试部署项目。如果您想在解决方案级别执行此操作,请使用.testrunconfig settings

答案 3 :(得分:3)

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

首先创建一个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>
<...../>
  • 在visual studio中运行,使用“测试\测试设置”菜单中的“选择测试设置文件”选择新的测试设置

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

答案 4 :(得分:2)

您可以在包含AssemblyInitialize属性的方法的类中定义DeploymentItem。然后,无论您运行哪个测试,都可以确保复制文件。

不幸的是,DeploymentItem属性仅在包含您正在运行的测试的类上执行。因此,如果您有10个使用同一组文件的测试类,则必须将属性添加到所有文件中。

还发现* .testsettings文件中的更改不会在Visual Studio中自动刷新。因此,在testsettings中将文件/文件夹添加到部署后,您必须重新打开解决方案文件,然后运行测试。

答案 5 :(得分:2)

在Visual Studio 2012中,vstest.console.exe(内置测试运行器)以输出目录作为当前路径运行。这意味着您只需要在解决方案中包含“复制始终”或“复制如果更新”属性,以供测试使用。对于一般情况,您不需要DeploymentItem属性。从输出/测试目录中的命令行运行vstest.console.exe时也是如此。

在某些情况下,会使用单独的文件夹,其中一个是在使用DeploymentItem属性时。有关详细信息,请参阅here