Partager via


Comment : déployer des fichiers pour les tests

 

Publication: juillet 2016

Avant d'exécuter un test, le test et l'application doivent être copiés à un emplacement où ils peuvent s'exécuter, avec d'autres assemblys auxquels ils font référence.  En général, un test requiert également des fichiers supplémentaires tels que des données de test, des fichiers de configuration, une base de données et des assemblys explicitement chargés.  Pour rendre ces fichiers supplémentaires disponibles pour le test, vous devez spécifier qu'ils doivent être déployés.  

Où s'exécutent les tests ?

Visual Studio peut exécuter les tests à plusieurs emplacements :

Comment déployer des fichiers de test pour un test local ?

Voici la meilleure méthode :

  1. Copiez les fichiers dans le répertoire cible de génération dans le cadre du processus de génération.

    • S'ils sont spécifiques à un projet de test, incluez-les en tant que fichiers de contenu dans le projet de test Visual Studio.  Sélectionnez-les dans l'Explorateur de solutions et affectez à la propriété Copier dans la sortie la valeur Copier si plus récent.  

    • Sinon, définissez une tâche post-build pour copier les fichiers dans le répertoire de sortie de génération.  Par exemple :  

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

      Ouvrez les propriétés de votre projet de test.  Dans un projet C#, ouvrez la page Événements de build.  Dans un projet Visual Basic, ouvrez la page Compiler et choisissez Événements de build.  Ajoutez la commande de copie au champ Événement post-build.  

  2. Utilisez DeploymentItemAttribute sur des méthodes de test ou des classes de test pour spécifier les fichiers et les dossiers qui doivent être copiés du répertoire de sortie de génération vers le répertoire de déploiement.

    [TestClass]
    class TestClass1
    {
      [TestMethod]
      [DeploymentItem("source", "targetFolder")]
      public void Test1()
      {
        string testData = System.IO.File.ReadAllText(@"targetFolder\source");
        ...
    } }
    
    <TestClass()> _
    Public Class UnitTest1
        <TestMethod()> _
        <DeploymentItem("source", "targetFolder")> _
        Sub TestMethod1()
            Dim testData As String = _
                System.IO.File.ReadAllText(@"targetFolder\source")
        ...
        End Sub
    End Class
    
    • source est un fichier ou un répertoire à copier.  Le chemin d'accès peut être absolu ou relatif au répertoire de sortie de génération.  

    • targetFolder est facultatif.  Il s'agit du répertoire dans lequel le contenu du répertoire ou du fichier source sera copié.  Le chemin d'accès peut être absolu ou relatif au répertoire de déploiement.  La valeur par défaut est « . », le répertoire de déploiement.  

      Notes

      targetFolder est toujours un répertoire, jamais un chemin d'accès de fichier.  Vous ne pouvez pas modifier le nom du fichier à l'aide de DeploymentItem.  

    Vous pouvez utiliser l'attribut autant de fois que vous le souhaitez, et vous pouvez l'appliquer aux méthodes de test ou aux classes de test.

    Lorsque vous sélectionnez un ensemble de tests à exécuter, tous les éléments spécifiés dans leurs attributs DeploymentItem sont copiés avant le démarrage de la série de tests.

  3. Envisagez d'exécuter vos tests unitaires directement dans le répertoire de sortie de génération, afin que le test s'exécute plus rapidement.  Ceci est particulièrement utile sur le serveur de builds après avoir archivé vos tests.  

    Pour cela, ajoutez un fichier *.runsettings à votre solution, incluez <DeploymentEnabled>False</DeploymentEnabled>, puis sélectionnez le fichier dans le menu Test, Paramètres de test.  Le même effet se produit dans n'importe quelle série de tests dans laquelle DeploymentItemAttribute n'est pas utilisé du tout.  

    Toutefois, vous devez utiliser un dossier de déploiement si vous utilisez un fichier *.testsettings. Ceci est requis pour les tests web et les tests de charge, les tests codés de l'interface utilisateur et les tests dans lesquels vous déployez une application sur des ordinateurs distants.

Qu'est-ce qu'un fichier *.runsettings ?

Il s'agit de tout fichier possédant une extension ".runsettings".  Il est utilisé pour configurer des tests unitaires dans certains cas de figure.  Pour en créer un, copiez l'exemple fourni dans la rubrique Configurer des tests unitaires à l'aide d'un fichier .runsettings.  Insérez-le dans un dossier de solution, puis activez-le à l'aide du menu Test > Paramètres de test.  

Quand dois-je utiliser un fichier *.testsettings ?

Un fichier *.testsettings (c'est-à-dire un fichier ayant une extension ".testsettings") est une ancienne alternative au fichier *.runsettings.  Pour en créer un, utilisez l'élément de menu correspondant dans le menu Test > Paramètres de test.  Enregistrez le fichier dans un dossier de solution, puis activez-le à l'aide du menu Test > Paramètres de test.  

Dans la mesure du possible, évitez d'utiliser les fichiers *.testsettings, car ils ralentissent les tests et sont incompatibles avec les infrastructures de test tierces.  Ils ne sont pas nécessaires pour les tests unitaires simples.  Cependant, vous en aurez besoin dans les cas suivants :  

Si vous utilisez un fichier *.testsettings, vos assemblys d'application et de test seront toujours copiés vers un dossier de déploiement.

Vous pouvez spécifier les fichiers et répertoires de données dans la page Déploiement de l'éditeur de .testsettings.  Ils sont copiés dans le dossier de déploiement avant chaque série de tests.  Les chemins d'accès aux éléments spécifiés dans cette page sont toujours relatifs au répertoire de la solution, et sont toujours déployés vers le dossier de déploiement ainsi que les assemblys d'application et de test.  

Si vous souhaitez utiliser des chemins d'accès absolus ou spécifier un autre répertoire cible, ouvrez le fichier .testsettings avec l'éditeur XML et insérez un fragment similaire au suivant :

<Deployment>
  <DeploymentItem filename="C:\MyTestData\TestData.mdb"
        outputDirectory="D:\TestDB\" />
</Deployment>

outputDirectory peut être absolu ou relatif au répertoire de déploiement.

Quand un dossier de déploiement distinct est-il utilisé ?

Si vous exécutez des tests à l'aide de Visual Studio, le dossier de déploiement est créé sous TestResults dans le dossier de votre solution.

Un dossier de déploiement distinct est utilisé si l'une des méthodes ou classes de test d'une série de tests possède l'attribut DeploymentItem, ou si vous utilisez un fichier *.testsettings.

Si un dossier de déploiement est utilisé, les fichiers et dossiers suivants sont copiés dans le dossier de déploiement avant l'exécution des tests :

Dossier de déploiement local en vue de tests

Dossiers de déploiement pour une série de tests locale

Quand les fichiers sont-ils déployés et dans quel ordre ?

Dans une série de tests, tous les fichiers à déployer sont copiés avant le démarrage des tests.  Une série de tests est une série de tests lancés par une simple commande ou un événement planifié.  Cela signifie que si vous spécifiez un fichier de données à déployer pour une méthode de test particulière, il est également disponible pour chaque autre test qui est exécuté dans la même série.  

Les éléments suivants sont copiés, dans l'ordre indiqué.  Les éléments qui sont copiés ultérieurement remplacent ceux qui ont été copiés précédemment, s'ils ont le même nom.  

  1. Éléments spécifiés à l'aide de DeploymentItemAttribute

  2. Dépendances.  Par exemple, les fichiers de configuration de l'application et les assemblys dépendants.  

  3. Éléments spécifiés dans un fichier *.testsettings, si vous en utilisez un.

  4. Binaires instrumentés.  Par exemple, les assemblys qui ont été instrumentés pour activer la couverture du code ou IntelliTrace.  

    Si vous utilisez l'instrumentation sur place, les binaires sont d'abord instrumentés, puis copiés dans le répertoire de déploiement ; sinon, ils sont d'abord copiés, puis instrumentés.  L'instrumentation sur place est le paramètre par défaut pour les tests qui sont exécutés localement.  

  5. Fichiers qui composent le test.  Ceux-ci incluent les assemblys de test pour les tests unitaires, les fichiers texte ou .mht pour les tests manuels ou d'autres types de fichiers pour d'autres types de tests (tels que les tests génériques).  

Que contient le répertoire TestResults ?

  • Dossier de série de tests.  TestResults contient un dossier pour chaque série de tests qui a démarré.  Son nom inclut l'heure à laquelle il a été créé.  

    Si vous spécifiez des scripts d'installation et de nettoyage dans un fichier *.testsettings, le dossier de série de tests contiendra ces scripts.

  • Out.  Chaque dossier de série de tests contient un dossier appelé Out.  Le dossier de sortie est le dossier de déploiement réel, dans lequel les assemblys et autres fichiers de déploiement sont copiés lorsque la série de tests démarre.  

  • In.  Les résultats de couverture du code et certains autres résultats de tests sont stockés dans le dossier appelé In.  

Voir aussi

DeploymentItemAttribute
Spécification de paramètres de test pour Visual Studio Tests
Instrumentation et nouvelle signature d'assemblys