Condividi tramite


Classe DeploymentItemAttribute

Specificare un file o una directory che devono essere distribuite con gli assembly prima di eseguire un test. Aggiungere questo attributo a una classe di test o a un metodo di test. È possibile utilizzare più istanze. Questo attributo non viene ereditato.

Gerarchia di ereditarietà

Object
  Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute

Spazio dei nomi:  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (in Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Sintassi

'Dichiarazione
<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

Il tipo DeploymentItemAttribute espone i seguenti membri.

Costruttori

  Nome Descrizione
Metodo pubblico DeploymentItemAttribute(String) Specifica un elemento da distribuire prima dell'esecuzione del test.
Metodo pubblico DeploymentItemAttribute(String, String) Specifica un elemento da distribuire prima dell'esecuzione del test.

In alto

Proprietà

  Nome Descrizione
Proprietà pubblica OutputDirectory Recupera il percorso della directory in cui l'elemento è copiato.
Proprietà pubblica Path Ottiene il percorso del file di origine o della cartella da copiare.
Proprietà pubblica TypeId Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute. (Ereditato da Attribute)

In alto

Metodi

  Nome Descrizione
Metodo pubblico Equals Infrastruttura. Restituisce un valore che indica se l'istanza è uguale a un oggetto specificato. (Ereditato da Attribute)
Metodo pubblico GetHashCode Restituisce il codice hash per l'istanza. (Ereditato da Attribute)
Metodo pubblico GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblico IsDefaultAttribute Quando è sottoposto a override in una classe derivata, indica se il valore di questa istanza è il valore predefinito della classe derivata. (Ereditato da Attribute)
Metodo pubblico Match Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato. (Ereditato da Attribute)
Metodo pubblico ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)

In alto

Implementazioni esplicite dell'interfaccia

  Nome Descrizione
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#GetIDsOfNames Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch. (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#GetTypeInfo Recupera le informazioni sul tipo relative a un oggetto, che possono essere utilizzate per ottenere informazioni sul tipo relative a un'interfaccia. (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#GetTypeInfoCount Recupera il numero delle interfacce di informazioni di tipo fornite da un oggetto (0 o 1). (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#Invoke Fornisce l'accesso a proprietà e metodi esposti da un oggetto. (Ereditato da Attribute)

In alto

Note

Visual Studio 2012 esegue i test nella cartella in cui sono state compilate o in una cartella separata di distribuzione univoca per l'esecuzione dei test. Se una cartella di distribuzione viene utilizzata, il motore di test crea una cartella di distribuzione e ci copia dentro gli assembly che contengono codice di test, l'applicazione e tutti gli assembly a cui fanno riferimento.

Alcuni test in genere richiedono anche file aggiuntivi come dati di test, file di configurazione, database o assembly caricati in modo esplicito. Per rendere tali file disponibili durante il test, è necessario specificare che vengano copiati anche gli assembly di test. Questa è la maniera migliore per eseguire questa operazione:

  1. Copiare i file in una directory di destinazione della compilazione come parte del processo di compilazione.

    • Se sono specifici di un progetto di test, includerli come file di dati nel progetto di test in Visual Studio. Selezionarli in Esplora soluzioni e impostare la proprietà Copia in output a Copia se più recente.

    • In caso contrario, definire un'attività post-compilazione per copiare i file nella directory di output di compilazione. Di seguito è riportato un esempio:

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

      Aprire le proprietà del progetto di test. In un progetto C#, aprire la pagina Eventi di compilazione. In un progetto di Visual Basic, aprire la pagina Compila e scegliere Eventi di compilazione. Aggiungere il comando di copia al campo Evento di post-compilazione.

  2. Utilizzare DeploymentItemAttribute sui metodi di test o sulle classi di test per specificare i file e le cartelle da copiare dalla directory di output di compilazione nella directory di distribuzione.

  3. Considerare la possibilità di eseguire gli unit test direttamente nella directory dell'output di compilazione, in modo che il test venga eseguito più velocemente. Ciò è particolarmente utile nel server di compilazione dopo avere archiviato i test. A tale scopo, aggiungere un file .runsettings alla soluzione, includere <DeploymentEnabled>False</DeploymentEnabled> e selezionare il file da Test, Impostazioni test. Lo stesso effetto si verifica nell'esecuzione dei test in cui DeploymentItemAttribute non viene mai utilizzato.

    Tuttavia, è preferibile non eseguire questa operazione se si desidera poter ispezionare i file di dati dopo un'esecuzione non riuscita.

    Non è possibile evitare l'utilizzo di una cartella di distribuzione se si utilizza un file .testsettings, richiesto per i test Web e i test di carico, i test codificati dell'interfaccia utente e i test in cui si distribuisce un'applicazione in computer remoti.

In un'esecuzione di test, tutti gli elementi nei test che devono essere eseguiti vengono distribuiti prima che il test sia avviato.

Per ulteriori informazioni, vedere Procedura: distribuire file per test.

DeploymentItemAttribute dispone di due parametri:

  • Percorso di origine dell'elemento è relativo alla cartella di output di compilazione. Può essere un file o una cartella. Per evitare la dipendenza dalla struttura del progetto, spostare l'elemento nella directory di output di compilazione come parte del processo di compilazione. Utilizzare l'attributo dell'elemento di distribuzione per la distribuzione.

  • (Facoltativo) Percorso di directory di destinazione deve essere una cartella ed è relativo alla directory di distribuzione. Se non esiste, la cartella verrà creata. Il valore predefinito è la directory di distribuzione.

    Non è possibile modificare il nome del file tramite DeploymentItem.

Nell'esempio seguente viene illustrato l'utilizzo di DeploymentItemAttribute.

  • [DeploymentItem("file1.xml")]
    Copia file1.xml dalla directory di output di compilazione nella directory di distribuzione.

  • [DeploymentItem(@"Testfiles\")]
    Copia tutti i file e cartelle nella cartella Testfiles dalla cartella di output di compilazione nella cartella di distribuzione. Le sottocartelle vengono replicate nella cartella di distribuzione.

  • [DeploymentItem("file2.xml", "DataFiles")]
    Crea una cartella denominata DataFiles nella cartella di distribuzione e copia file2.xml dalla cartella di output di compilazione a DataFiles.

    Nota

    Se si utilizza il secondo parametro, deve essere sempre il percorso di una cartella, mai un file.Se non esiste, la cartella verrà creata.Non è possibile modificare il nome del file tramite DeploymentItem.

  • [DeploymentItem(@"Resources\file2.xml", "DataFiles")]
    Crea una cartella denominata DataFiles nella cartella di distribuzione se non esiste. Copia file2.xml dalla cartella Risorse nella cartella di output di compilazione a DataFiles. Si noti che la cartella Risorse non viene duplicata nella cartella di destinazione.

  • [DeploymentItem(@"TestFiles\", "TestFiles")]
    Copia il contenuto di TestFiles in una sottocartella della cartella di distribuzione. Le sottocartelle vengono replicate nella destinazione.

  • [DeploymentItem(@"..\..\file1.xml")] (Non consigliato)
    Copia un elemento dalla directory del progetto. In questo esempio si presuppone la struttura tipica del progetto in cui la directory di output è, ad esempio, in bin\Debug.

    Anziché basarsi sulla struttura del progetto in questo modo, impostare la proprietà Copia di output del file. Distribuire il file dalla directory di output di compilazione.

  • [DeploymentItem(@"C:\MyDataFiles\")]
    Copiare il contenuto della cartella MyDataFiles nella cartella di distribuzione.

  • (Se si utilizza un file .testsettings) [DeploymentItem("%myDir%\myFile.txt")]
    Distribuisce il file myFile.txt se esiste nella directory in cui si risolve %myDir%.

Per ulteriori informazioni sulla modalità di utilizzo degli attributi, vedere Estensione di metadati mediante attributi.

Esempi

Il test seguente legge i file denominati "test*.xml". Per rendere i file disponibili per i test e all'applicazione sottoposta a test, vengono identificati mediante DeploymentItemAttribute. Il metodo di test consente di verificare che i file siano presenti nella directory di distribuzione, prima di continuare a eseguire l'applicazione.

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

Codice thread safe

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Vedere anche

Riferimenti

Spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting