DeploymentItemAttribute 类

指定应具有在运行测试之前的程序集一起部署的文件或目录。 附加此属性设置为测试选件类或测试方法。 可以使用多个实例。 此属性不继承。

继承层次结构

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute

命名空间:  Microsoft.VisualStudio.TestTools.UnitTesting
程序集:  Microsoft.VisualStudio.QualityTools.UnitTestFramework(在 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 中)

语法

声明
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple := True)> _
Public NotInheritable Class DeploymentItemAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = true)]
public sealed class DeploymentItemAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Method, AllowMultiple = true)]
public ref class DeploymentItemAttribute sealed : public Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = true)>]
type DeploymentItemAttribute =  
    class
        inherit Attribute
    end
public final class DeploymentItemAttribute extends Attribute

DeploymentItemAttribute 类型公开以下成员。

构造函数

  名称 说明
公共方法 DeploymentItemAttribute(String) 在测试运行开始之前,指定项目将部署。
公共方法 DeploymentItemAttribute(String, String) 在测试运行开始之前,指定项目将部署。

页首

属性

  名称 说明
公共属性 OutputDirectory 获取项目复制目录的路径。
公共属性 Path 获取源文件或文件夹的路径的文件夹。
公共属性 TypeId 当在派生类中实现时,获取该 Attribute 的唯一标识符。 (继承自 Attribute。)

页首

方法

  名称 说明
公共方法 Equals 基础结构。返回一个值,该值指示此实例是否与指定的对象相等。 (继承自 Attribute。)
公共方法 GetHashCode 返回此实例的哈希代码。 (继承自 Attribute。)
公共方法 GetType 获取当前实例的 Type。 (继承自 Object。)
公共方法 IsDefaultAttribute 当在派生类中重写时,指示此实例的值是否是派生类的默认值。 (继承自 Attribute。)
公共方法 Match 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute。)
公共方法 ToString 返回表示当前对象的字符串。 (继承自 Object。)

页首

显式接口实现

  名称 说明
显式接口实现私有方法 _Attribute.GetIDsOfNames 将一组名称映射为对应的一组调度标识符。 (继承自 Attribute。)
显式接口实现私有方法 _Attribute.GetTypeInfo 检索对象的类型信息,然后可以使用该信息获取接口的类型信息。 (继承自 Attribute。)
显式接口实现私有方法 _Attribute.GetTypeInfoCount 检索对象提供的类型信息接口的数量(0 或 1)。 (继承自 Attribute。)
显式接口实现私有方法 _Attribute.Invoke 提供对某一对象公开的属性和方法的访问。 (继承自 Attribute。)

页首

备注

Visual Studio 2012 运行测试可在生成它们的文件夹或在对测试是唯一的单独部署文件夹。 如果使用部署文件夹,测试引擎创建部署文件夹和复制到它包含测试代码、应用程序及其引用的所有程序集。

但是,某些测试需要其他文件,例如测试数据、配置文件、数据库或显式加载的程序集。 若要使这些文件可在测试过程中,您必须指定应与测试程序集一起复制它们。 这是最佳方法可以实现此目的:

  1. 将文件复制到生成目标目录作为生成过程的一部分。

    • 如果这些特定于个测试项目,包括它们,当在 Visual Studio 的内容文件测试项目。 选择它们在解决方案资源管理器并将 复制到输出 属性设置为 如果较新则复制

    • 否则,请定义后期生成任务将文件复制到生成输出目录。 例如:

      xcopy /Y /S "$(SolutionDir)SharedFiles\*" "$(TargetDir)"
      

      打开项目属性测试项目。 在 C# 项目中,打开 生成事件 页。 在 Visual Basic 项目中,打开 编译 页并选择 生成事件。 添加复制命令到 后期生成事件 字段。

  2. 使用 DeploymentItemAttribute 测试方法或测试选件类指定应从生成输出目录复制到部署目录中的文件和文件夹。

  3. 考虑运行单元测试直接将生成输出目录,因此,测试更快速地运行。 在注册了测试之后,这尤其有用在生成服务器上。 为此,请将一 .runsettings 文件添加到您的解决方案,包括 <DeploymentEnabled>False</DeploymentEnabled>,然后选择在 测试的文件,测试设置 菜单。 相同的效果在任何在根本不使用哪 DeploymentItemAttribute 发生测试运行。

    但是,因此,如果您希望能够在运行时,的失败后检查数据文件您可能不希望执行此操作。

    您不能避免使用部署文件夹,如果使用的 .testsettings 文件,对于 web 是必需的,负载测试,编码的 UI 测试,因此,任何在哪些测试将应用程序部署到远程计算机。

在测试运行,在将运行部署的所有项目测试,用任何测试开始之前。

有关更多信息,请参见如何:为测试部署文件

DeploymentItemAttribute 有两个参数:

  • 源项目路径 相对于生成输出文件夹。 它可以是文件或文件夹。 若要避免在项目结构的依赖关系,请将该项目生成的输出目录作为生成过程的一部分。 使用部署项目属性部署这些代码。

  • (可选) 目标目录路径 必须是文件夹,因此,它相对部署目录中。 如果该文件夹不存在,则将创建。 默认值为部署目录中。

    使用 DeploymentItem,不能将文件名更改为。

下面的示例演示 DeploymentItemAttribute的用法:

  • [DeploymentItem("file1.xml")]
    复制 file1.xml 从生成输出目录添加到部署目录。

  • [DeploymentItem(@"Testfiles\")]
    复制所有文件和文件夹。Testfiles 文件夹从生成输出文件夹添加到部署文件夹。 子文件夹在部署文件夹复制。

  • [DeploymentItem("file2.xml", "DataFiles")]
    创建在部署文件夹名为的 DataFiles 一个文件夹,并复制从生成输出文件夹中的 file2.xml 到数据存档。

    备注

    如果使用第二个参数,它必须始终是文件夹,从文件的路径。如果该文件夹不存在,则将创建。使用 DeploymentItem,不能更改文件的名称。

  • [DeploymentItem(@"Resources\file2.xml", "DataFiles")]
    如果不存在,创建在部署文件夹名为的 DataFiles 一个文件夹。 复制资源文件夹的 file2.xml 在生成输出文件夹下到数据存档。 通知资源文件夹在目标文件夹中没有重复项。

  • [DeploymentItem(@"TestFiles\", "TestFiles")]
    TestFiles 内容复制到部署文件夹的子文件夹。 子文件夹复制到该目标下。

  • [DeploymentItem(@"..\..\file1.xml")] (不建议)
    将一个项从项目目录。 此示例假定输出目录,例如,在 bin\debug 的典型的项目结构。

    而不是这取决于项目结构,设置文件的 复制到输出 属性。 部署文件从生成输出目录。

  • [DeploymentItem(@"C:\MyDataFiles\")]
    复制 MyDataFiles 文件夹的内容添加到部署文件夹。

  • (如果使用的 .testsettings 文件) [DeploymentItem("%myDir%\myFile.txt")]
    部署文件 myFile.txt,如果该文件存在于 %myDir% 解决的内容。

有关如何使用特性的更多信息,请参见利用特性扩展元数据

示例

以下测试读取文件名为“test*.xml”。 使用 DeploymentItemAttribute,若要让该文件提供给测试和受测应用程序,它们来标识。 测试方法在之前测试应用程序文件存在部署目录下。

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

namespace DeploymentTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        // Copy files from build directory:
        [DeploymentItem("test1.xml")]
        [DeploymentItem("test2.xml", "Data")]
        // Copy files from Resources subdirectory:
        [DeploymentItem("Resources\\test3.xml")]
        [DeploymentItem("Resources\\test4.xml", "Data")]

        public void ConstructorTest()
        {
            // Verify that the files exist in the deployment directory
            Assert.IsTrue(File.Exists("test1.xml"));
            Assert.IsTrue(File.Exists("Data\\test2.xml"));
            Assert.IsTrue(File.Exists("test3.xml"));
            Assert.IsTrue(File.Exists("Data\\test4.xml"));

            // Now test the application ...
        }
    }
}
Imports System
Imports System.IO
Imports Microsoft.VisualStudio.TestTools.UnitTesting

Namespace DeploymentTest
    <TestClass()> _
    Public Class UnitTest1
        <TestMethod()> _
        <DeploymentItem("test1.xml")> _
        <DeploymentItem("test2.xml", "Data")> _
        <DeploymentItem("Resources\test3.xml")> _
        <DeploymentItem("Resources\test4.xml", "Data")> _
        Sub ConstructorTest()
            Assert.IsTrue(File.Exists("test1.xml"))
            Assert.IsTrue(File.Exists("Data\test2.xml"))
            Assert.IsTrue(File.Exists("test3.xml"))
            Assert.IsTrue(File.Exists("Data\test4.xml"))

            ' Now test the application ...
        End Sub
    End Class
End Namespace

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

请参见

参考

Microsoft.VisualStudio.TestTools.UnitTesting 命名空间