Compartir a través de


DeploymentItemAttribute (Clase)

Especifique un archivo o directorio que deberían implementar a los ensamblados antes de ejecutar una prueba. Asocie este atributo a una clase de prueba o un método de prueba. Puede usar varias instancias. Este atributo no se hereda.

Jerarquía de herencia

Object
  Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute

Espacio de nombres:  Microsoft.VisualStudio.TestTools.UnitTesting
Ensamblado:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (en Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Sintaxis

'Declaración
<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

El tipo DeploymentItemAttribute expone los siguientes miembros.

Constructores

  Nombre Descripción
Método público DeploymentItemAttribute(String) Especifica un elemento que se implementará antes de que una prueba se inicie.
Método público DeploymentItemAttribute(String, String) Especifica un elemento que se implementará antes de que una prueba se inicie.

Arriba

Propiedades

  Nombre Descripción
Propiedad pública OutputDirectory Obtiene la ruta del directorio donde se copia el elemento.
Propiedad pública Path Obtiene la ruta del archivo de código fuente o la carpeta que se van a copiar.
Propiedad pública TypeId Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Se hereda de Attribute).

Arriba

Métodos

  Nombre Descripción
Método público Equals Infraestructura. Devuelve un valor que indica si esta instancia equivale a un objeto especificado. (Se hereda de Attribute).
Método público GetHashCode Devuelve el código hash de esta instancia. (Se hereda de Attribute).
Método público GetType Obtiene el objeto Type de la instancia actual. (Se hereda de Object).
Método público IsDefaultAttribute Cuando se invalida en una clase derivada, indica si el valor de esta instancia es el valor predeterminado para la clase derivada. (Se hereda de Attribute).
Método público Match Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado. (Se hereda de Attribute).
Método público ToString Devuelve una cadena que representa el objeto actual. (Se hereda de Object).

Arriba

Implementaciones explícitas de interfaces

  Nombre Descripción
Implementación explícita de interfacesMétodo privado System#Runtime#InteropServices#_Attribute#GetIDsOfNames Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado System#Runtime#InteropServices#_Attribute#GetTypeInfo Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado System#Runtime#InteropServices#_Attribute#GetTypeInfoCount Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1). (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado System#Runtime#InteropServices#_Attribute#Invoke Proporciona acceso a las propiedades y los métodos expuestos por un objeto. (Se hereda de Attribute).

Arriba

Comentarios

Visual Studio 2012 ejecuta pruebas en la carpeta en la que se ha compilado o en una carpeta independiente de implementación única para la prueba. Si se utiliza una carpeta de implementación, el motor de pruebas crea una carpeta y las copias de implementación en él ensamblados que contienen el código de prueba, aplicación, y cualquier ensamblado que hace referencia.

Pero algunas pruebas requieren archivos adicionales, como datos de prueba, archivos de configuración, bases de datos, o ensamblados explícitamente cargados. Para que estos archivos disponibles durante la prueba, tiene que especificar que deben copiarse junto con los ensamblados de prueba. Ésta es la mejor manera de hacerlo:

  1. Copie los archivos en el directorio de destino Build como parte del proceso de compilación.

    • Si son específicos de un proyecto de prueba, inclúyalos como archivos de contenido en el proyecto de prueba de Visual Studio. Selecciónelos en el Explorador de soluciones y establezca la propiedad Copia los resultados en Copiar si es posterior.

    • Si no, defina una tarea posterior a la compilación de copiar archivos en el directorio de salida de compilación. Por ejemplo:

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

      Abra las propiedades del proyecto de prueba. En un proyecto de C#, abra la página Eventos de compilación . En un proyecto de Visual Basic, abra la página Compilar y elija Eventos de compilación. Agregue el comando Copiar el campo Evento posterior a la compilación .

  2. Utilice DeploymentItemAttribute en los métodos de prueba o clases de prueba para especificar los archivos y carpetas que se deben copiar el directorio de salida de compilación en el directorio de implementación.

  3. Considere ejecutar las pruebas unitarias directamente en el directorio de salida de compilación, de modo que las ejecuciones de pruebas más rápidamente. Esto resulta especialmente útil en el servidor de compilación después de proteger las pruebas. Para ello, agregar un archivo .runsettings a la solución, incluyen <DeploymentEnabled>False</DeploymentEnabled>, y seleccione el archivo en el Probar, menú Configuración de pruebas . El mismo efecto aparece en cualquier prueba en la que DeploymentItemAttribute no se utilice en absoluto.

    Sin embargo, podría preferir no hacerlo si desea poder inspeccionar los archivos de datos después de una ejecución no superado.

    No puede evitar usar una carpeta de implementación si utiliza un archivo .testsettings , necesario para web y pruebas de carga, codificado pruebas de IU, y cualquier prueba donde se implementa una aplicación a equipos remotos.

En una prueba, todos los elementos en pruebas que deben ejecutarse se implementan antes de que se inicie cualquier prueba.

Para obtener más información, vea Cómo: Implementar archivos para pruebas.

DeploymentItemAttribute tiene dos parámetros:

  • Ruta de elemento de origen es relativa a la carpeta de resultados de compilación. Puede ser un archivo o una carpeta. Para evitar dependencia en la estructura del proyecto, mueva el elemento al directorio de salida de compilación como parte del proceso de compilación. Utilice el atributo de elementos de implementación para implementarlo desde allí.

  • (Opcional) Ruta de directorio de destino debe ser una carpeta, y es relativa al directorio de implementación. Si esta carpeta no existe, se creará. El valor predeterminado es el directorio de implementación.

    No puede cambiar el nombre de archivo utilizando DeploymentItem.

Los ejemplos siguientes muestran el uso de DeploymentItemAttribute:

  • [DeploymentItem("file1.xml")]
    Copia file1.xml del directorio de salida de compilación en el directorio de implementación.

  • [DeploymentItem(@"Testfiles\")]
    Copie todos los archivos y carpetas de la carpeta de Testfiles de la carpeta de resultados de la compilación en la carpeta de implementación. Las subcarpetas se replicarán en la carpeta de implementación.

  • [DeploymentItem("file2.xml", "DataFiles")]
    Crea una carpeta denominada DataFiles en la carpeta de implementación, y copia file2.xml de la carpeta de resultados de la compilación a archivos de datos.

    Nota

    Si utiliza el segundo parámetro, debe ser siempre la ruta de acceso de una carpeta, nunca un archivo.Si esta carpeta no existe, se creará.No puede cambiar el nombre de archivo utilizando DeploymentItem.

  • [DeploymentItem(@"Resources\file2.xml", "DataFiles")]
    Crea una carpeta denominada DataFiles en la carpeta de implementación si no existe. Copia file2.xml de la carpeta de recursos en la carpeta de resultados de la compilación a archivos de datos. Observe que la carpeta de recursos no está duplicada en la carpeta de destino.

  • [DeploymentItem(@"TestFiles\", "TestFiles")]
    Copia el contenido de TestFiles en una subcarpeta de la carpeta de implementación. Las subcarpetas se replican en destino.

  • [DeploymentItem(@"..\..\file1.xml")] (no recomendado)
    Copia un elemento del directorio de proyecto. Este ejemplo supone la estructura típica del proyecto en que el directorio de salida es, por ejemplo, en bin \ Debug.

    En lugar de basarse en la estructura de proyecto de esta manera, establezca la propiedad Copia los resultados de archivo. Implemente el archivo del directorio de salida de compilación.

  • [DeploymentItem(@"C:\MyDataFiles\")]
    Copia el contenido de la carpeta de MyDataFiles en la carpeta de implementación.

  • (Si usa un archivo .testsettings ) [DeploymentItem("%myDir%\myFile.txt")]
    Implementa el archivo myFile.txt si ese archivo existe en el directorio donde %myDir% resuelve.

Para obtener más información acerca de cómo utilizar los atributos, vea Extender metadatos mediante atributos.

Ejemplos

La prueba siguiente lee los archivos denominados “test*.xml”. Para colocar los archivos a disposición a la prueba y la aplicación en pruebas, se identifican mediante DeploymentItemAttribute. El método de prueba comprobará si los archivos existen bajo el directorio de implementación, antes de continuar probar la aplicación.

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

Seguridad para subprocesos

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Vea también

Referencia

Microsoft.VisualStudio.TestTools.UnitTesting (Espacio de nombres)