Les éléments de déploiement MSTest ne fonctionnent-ils que lorsqu’ils sont présents dans le fichier de parameters de test du projet?

Je n’arrive pas à comprendre comment les éléments de déploiement MSTest sont supposés être configurés. J’ai été en mesure de les faire fonctionner correctement en modifiant le fichier de parameters de test du projet, mais ce n’est pas la solution idéale: la configuration de l’élément de déploiement est séparée des tests individuels et les chemins sous le dossier de la solution.

Est-ce que je ne suis pas censé pouvoir append un élément de déploiement en utilisant l’atsortingbut [DeploymentItem] sur un [TestClass] ou un [TestMethod] sans avoir à créer / modifier un fichier de parameters de test de projet? Comment puis-je accomplir cela?

(Franchement, je ne comprends pas la nécessité d’une configuration d’élément de déploiement distincte – pourquoi ne pas simplement utiliser les parameters existants «Copier dans le répertoire de sortie» pour les fichiers de projet qui devraient être des éléments de déploiement?)

Ok – cet article m’a aidé à comprendre ce que je devais faire SANS avoir à append manuellement des éléments au fichier .testsettings .

Étape 1 – Activez l’atsortingbut MS Test DeploymentItem .

Tout d’abord, nous devons activer / activer l’atsortingbut DeploymentItem .

Goto TEST -> EDIT TEST SETTINGS -> Réglages Actuels Actifs .. par exemple :: Local (local.testsettings)

texte alt

Maintenant, allez à DÉPLOIEMENT et assurez-vous que Activer le déploiement est coché. (Par défaut, c’est désactivé).

texte alt

Étape 2 – Vérifier les propriétés du fichier

Maintenant, nous devons nous assurer que le fichier que vous souhaitez utiliser dans le test unitaire est configuré pour être copié dans le répertoire BIN lors de la compilation. Seuls les fichiers situés dans le répertoire BIN peuvent être utilisés dans un test unitaire MS Test. Pourquoi? Parce que chaque fois qu’un test MS est exécuté, il doit faire une copie des sources … et cela signifie qu’il fait une copie des fichiers de répertoire BIN actuels (pour la configuration actuelle).

Par exemple … La configuration actuelle est Debug (par opposition à Release). texte alt

J’ajoute alors mon fichier … (notez la structure du dossier dans le projet) …

texte alt

puis assurez-vous que ce fichier est TOUJOURS copié dans le répertoire bin lorsque le projet est compilé.

texte alt

CONSEIL PRO: Copy Always fonctionnera également, mais copiez toujours le fichier source sur le fichier de destination, même s’il est identique. C’est pourquoi je préfère Copy si Newer … mais ce qui flotte sur votre bateau

Ok mesdames et messieurs – toujours avec moi? Wikid.

Lorsque nous compilons, le fichier devrait maintenant exister dans le répertoire Bin ….

texte alt

Étape 3 – Utilisez maintenant l’atsortingbut DeploymentItem

Ok, maintenant nous pouvons enfin utiliser l’atsortingbut DeploymentItem dans notre code. Lorsque nous faisons cela, cela indique au MSTest de copier le fichier (à partir de l’emplacement relatif au répertoire bin) dans le nouveau répertoire MS Test …

 [TestMethod] [DeploymentItem(@"Test Data\100LogEnsortinges.txt", "Test Data")] public void Parsing100LogFileEnsortingesReturnsANewParsedLogEnsortingesWith100Items() { // Arrange. const ssortingng fileName = @"Test Data\100LogEnsortinges.txt"; ILogEntryService logEntryService = new PunkBusterLogEntryService(); // Act. var parsedLogEnsortinges = logEntryService.ParseLogFile(fileName, 0); // Assert. Assert.IsNotNull(parsedLogEnsortinges); Assert.AreEqual(100, parsedLogEnsortinges.LogEnsortinges.Count); // Snipped the remaining asserts to cut back on wasting your time. } 

Alors laisse tomber ça ..

 [TestMethod] 

Nous soaps tous ce que c’est.

 [DeploymentItem(@"Test Data\100LogEnsortinges.txt", "Test Data")] 

Dans le répertoire bin, allez dans le dossier Test Data et copiez le fichier 100LogEnsortinges.txt dans un dossier de destination Test Data , dans le répertoire de sortie racine de MS Test créé par MS Test lorsque chaque test est exécuté.

Voici à quoi ressemble la structure de mon dossier de sortie. (Excuse tout le désordre …)

texte alt

et le tour est joué! nous avons des fichiers de déploiement, par programmation.

PRO TIP # 2 – Si vous n’utilisez pas d’argument de 2ème chaîne dans l’atsortingbut DeploymentItem , le fichier sera copié dans le dossier racine OUT du test MS actuel.

 const ssortingng fileName = @"Test Data\100LogEnsortinges.txt"; 

Maintenant, le chemin d’access au fichier est relatif au dossier OUT pour le test MS en cours. En tant que tel, j’ai explicitement dit de déployer le fichier dans un répertoire appelé Test Data … alors je dois m’assurer que je le référence correctement dans mon code lorsque je veux lire dans le fichier.

Juste pour confirmer -> le chemin complet de ce nom de fichier est traduit en quelque chose comme C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data .. Tester.

HTH.

Maintenant, a une photo d’une Licorne, pour lire autant 🙂

texte alt

Je pensais partager un moyen de rencontrer des problèmes avec MSTest et les éléments de déploiement. Si vous déboguez / exécutez votre test une deuxième fois ou plus depuis la fenêtre “Résultats du test”, il utilise les parameters d’une exécution précédente. Cependant, si vous déboguez / exécutez le même test à partir de la fenêtre “Test View”, il utilise les parameters les plus récents. J’ai perdu une heure à essayer de comprendre pourquoi les modifications apscopes à Local.testsettings n’étaient pas utilisées lorsque je continuais à démarrer Debug sur le même test à partir de la fenêtre “Résultats du test”.

Il s’agit de la fenêtre Résultats du test (ne commencez pas les tests d’ici après avoir modifié les parameters Local.testsettings):

La fenêtre des résultats de test

Et ceci est la fenêtre Test View (lancer des tests à partir d’ici après avoir apporté des modifications à Local.testsettings):

La fenêtre de vue test

J’espère que cela sauvera quelqu’un de mal à la tête à l’avenir.

Dans Visual Studio 2012, le répertoire de sortie est le répertoire de travail, ce qui signifie que l’atsortingbut DeploymentItem n’est pas nécessaire pour le cas général (où vous n’avez pas d’éléments de déploiement spécifiques par test ou par classe). Cela signifie que si vous n’avez pas besoin d’utiliser l’atsortingbut DeploymentItem s’il y a un ensemble de fichiers que vous voulez que tous vos tests utilisent ou que vous ne soyez pas trop pernicieux à propos de chaque TestClass / TestMethod ayant des dépendances de déploiement distinctes.

Vous pouvez simplement cliquer sur Projet | Afficher tous les fichiers et inclure les sous-dossiers et fichiers dans Visual Studio avec l’atsortingbut «Copier toujours» ou «Copier si plus récent» dans votre projet et les fichiers seront copiés dans votre répertoire de sortie avec la hiérarchie intacte.

La même chose s’applique lors de l’exécution de vstest.console.exe à partir de la ligne de commande. Voir ici pour les détails.

Mettre à jour

Il existe des cas où le répertoire par défaut ne sera pas le répertoire de sortie. Plus précisément, lorsque vous choisissez Run All Tests le chemin par défaut sera sous TestResults\Deploy_... runsettings .

Le répertoire de sortie sera le répertoire par défaut lorsque vous n’utilisez pas DeploymentItems et: –

  • Vous cliquez avec le bouton droit sur le ou les tests dans Visual Studio et choisissez d’exécuter / déboguer, ou
  • Vous exécutez à partir de la ligne de commande en utilisant vstest.console.exe.

Si vous avez besoin d’un élément de déploiement séparé dans des scénarios de test individuels, veuillez utiliser l’atsortingbut [DeploymentItem("ssortingng file path")] dans chaque cas de test.

Pour mon cas, j’ajoute l’atsortingbut DeploymentItem, il ne peut pas prendre effet immédiatement. Je dois fermer et rouvrir la solution, puis les atsortingbuts DeploymentItem configurés prendront effet.

On dirait que cela fonctionne par défaut dans VS.NET 2012

Dans VS 2012, il vous suffit de créer le fichier log4net.properties (ou tout autre fichier de configuration pour log4net) Copier s’il est plus récent. (cliquez avec le bouton droit sur le fichier log4net.properties pour afficher les propriétés et le configurer)