web-dev-qa-db-fra.com

Fichier de copie MSTest pour tester le dossier d'exécution

J'ai un test qui nécessite la lecture et l'analyse d'un fichier XML. Comment puis-je faire copier ce fichier dans le dossier d'exécution de test à chaque fois?

Le fichier XML est défini sur "Copier si plus récent" et sur un mode de compilation "aucun" (car ce n'est pas vraiment une chose compilable)

105
Aaron Powell

utilisez un DeploymentItem attribut

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

Il semble que si vous fournissez un fichier TestSettings pour la solution, vous pouvez décocher l'option "Activer le déploiement" et empêcher mstest d'essayer de s'exécuter à partir de ...TestResults\...\out dossier dans lequel il ne copie pas vos fichiers supplémentaires (sauf si vous en faites une option de déploiement).

Cela est également utile si vous dépendez des fichiers supplémentaires dans une structure de dossiers conservée car les éléments de déploiement semblent tous être copiés directement (à plat) dans le dossier d'exécution temporaire (out) si vous utilisez l'option Déploiement, Ajouter un dossier dans TestSettings ( les réponses ci-dessus suggèrent que vous pouvez conserver la structure si vous ajoutez chaque élément comme son propre élément de déploiement).

Pour moi, cela a fonctionné correctement en exécutant des tests directement dans Visual Studio (c'est-à-dire que mes fichiers supplémentaires dans leur structure ont été trouvés et utilisés par des tests) parce que j'avais créé un fichier TestSettings pour une autre raison il y a longtemps (qui a activé le déploiement non coché), mais pas lorsque TeamCity a exécuté mstest pour exécuter des tests car je n'avais pas spécifié que le fichier TestSettings devait être utilisé.

Pour créer un fichier TestSettings dans Visual Studio, cliquez avec le bouton droit sur Solution et choisissez Nouvel élément, puis sélectionnez le modèle TestSettings. Pour utiliser le fichier TestSettings à l'invite de commandes de mstest.exe, ajoutez l'option /testsettings:C:\Src\mySolution\myProject\local.testsettings (ou ajouter comme option de ligne de commande supplémentaire dans TeamCity avec le chemin approprié)

24
TamW

La réponse Preet est utilisée pour déployer des éléments pour un seul test. Si vous voulez le faire au niveau de la solution, utilisez les . Paramètres testrunconfig .

8
Eric Bole-Feysot

La meilleure solution pour moi consiste à utiliser des paramètres de test, surtout si plusieurs tests nécessitent les mêmes fichiers de données.

Créez d'abord un fichier de paramètres de test et ajoutez les éléments de déploiement dont vous avez besoin (nom de fichier ou de dossier):

<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>
<...../>
  • En cours d'exécution dans Visual Studio, utilisez "Sélectionner le fichier de paramètres de test" dans le menu "Test\Paramètres de test" pour sélectionner de nouveaux paramètres de test.

  • En exécutant mstest, utilisez le paramètre/testsettings pour que mstest utilise vos testsettings.

3
FrankyHollywood

Vous pouvez définir DeploymentItem dans une classe qui contient une méthode avec l'attribut AssemblyInitialize. Ensuite, vous êtes sûr que les fichiers sont copiés quel que soit le test que vous exécutez.

Malheureusement, l'attribut DeploymentItem est exécuté uniquement sur les classes qui contiennent des tests que vous exécutez. Donc, si vous avez 10 classes de test qui utilisent le même ensemble de fichiers, vous devez ajouter l'attribut à chacun d'eux.

Nous avons également découvert que les modifications apportées aux fichiers * .testsettings ne sont pas automatiquement actualisées dans Visual Studio. Par conséquent, après avoir ajouté des fichiers/dossiers au déploiement dans les paramètres de test, vous devez rouvrir le fichier de solution, puis exécuter les tests.

2
Sielu

Dans Visual Studio 2012, vstest.console.exe (le programme d'exécution de test intégré) s'exécute avec le répertoire de sortie comme chemin d'accès actuel. Cela signifie que vous devez uniquement inclure les éléments dans votre solution avec la propriété "Copier toujours" ou "Copier si plus récent" pour qu'ils soient utilisés par votre test. Vous n'avez pas besoin de l'attribut DeploymentItem pour le cas général. La même chose s'applique lors de l'exécution de vstest.console.exe à partir de la ligne de commande à l'intérieur de votre répertoire de sortie/test.

Il existe certains cas où un dossier distinct est utilisé, l'un d'eux lorsque vous utilisez l'attribut DeploymentItem. Voir ici pour plus d'informations.

2
acarlon