77 votes

Éléments de déploiement MSTest fonctionnent uniquement lorsqu’il est présent dans le fichier de paramètres de test de projet ?

Je n'arrive pas à comprendre comment MSTest éléments de déploiement sont censés être configuré. J'ai été en mesure de faire leur travail correctement, en modifiant le projet de test du fichier de paramètres, mais c'est loin d'être idéale -- le déploiement de l'élément de configuration est séparé de tests individuels, et les chemins d'accès aux fichiers semblent être stockées comme des chemins absolus, sauf si les fichiers se trouvent sous le dossier de la solution.

Ne suis-je pas censé être en mesure d'ajouter un déploiement de l'élément à l'aide de l' [DeploymentItem] d'attribut sur un [TestClass] ou [TestMethod] sans avoir à créer/modifier un projet de test de fichier de paramètres? Comment dois-je accomplir?

(Franchement, je ne comprends pas la nécessité d'un déploiement de l'élément de configuration -- pourquoi ne pas simplement utiliser le "Copier vers un Répertoire de Sortie" paramètres pour les fichiers de projet qui doivent être des éléments de déploiement?)

226voto

Pure.Krome Points 28473

Ok ce post ici m'a aidé à comprendre ce que je devais faire SANS avoir à ajouter manuellement des éléments à l' .testsettings le fichier.

Étape 1 - Activer le MME Test DeploymentItem d'attribut.

Tout d'abord, nous avons besoin d'activer / de permettre à l' DeploymentItem d'attribut.

Goto TEST -> MODIFIER les PARAMÈTRES de TEST -> paramètres Actifs .. par exemple :: Locale (local.testsettings)

alt text

Maintenant goto DÉPLOIEMENT et assurez-vous Activer le Déploiement est coché. (Par défaut, il est désactivé).

alt text

É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 de l'unité, est configuré pour être copiés dans le répertoire BIN lorsque vous compilez. Seuls les fichiers qui sont dans le répertoire BIN peut être utilisé dans un MS de l'unité de Test de test. Pourquoi? Parce que chaque fois qu'un MS de Test est exécuté, il doit faire une copie des sources ... et cela signifie qu'il fait une copie de l'actuel répertoire BIN fichiers (pour la Configuration actuelle).

Par exemple... Configuration Actuelle est de Débogage (par opposition à la Libération). alt text

Je puis ajouter mon fichier ... (prendre note de la structure de dossier dans le Projet)...

alt text

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

alt text

PRO ASTUCE: Copier Toujours, mais toujours copier le fichier source sur le fichier de destination .. même si elles sont identiques. C'est pourquoi je préfère Copier si plus Récent ... mais quelle que soit la flotte votre bateau

Ok mesdames et messieurs - toujours avec moi? Wikid.

Lorsque nous de la compilation, le fichier doit existent aujourd'hui dans le Bin dir....

alt text

Étape 3 - Maintenant, utilisez l'attribut DeploymentItem

Ok, maintenant nous pouvons enfin utiliser l' DeploymentItem d'attribut dans notre code. Lorsque nous faisons cela, ceci dit l'MSTest pour copier le fichier (à partir de l'emplacement relatif par rapport au répertoire bin) à la nouvelle MS répertoire de Test...

[TestMethod]
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
public void Parsing100LogFileEntriesReturnsANewParsedLogEntriesWith100Items()
{
    // Arrange.
    const string fileName = @"Test Data\100LogEntries.txt";
    ILogEntryService logEntryService = new PunkBusterLogEntryService();

    // Act.
    var parsedLogEntries = logEntryService.ParseLogFile(fileName, 0);

    // Assert.
    Assert.IsNotNull(parsedLogEntries);
    Assert.AreEqual(100, parsedLogEntries.LogEntries.Count);
    // Snipped the remaining asserts to cut back on wasting your time.
}

Donc permet de briser ce bas..

[TestMethod]

Nous savons tous ce que c'est.

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

Départ dans le répertoire bin, aller dans l' Test Data le dossier et copiez le 100LogEntries.txt le fichier vers un dossier de destination Test Data, dans la racine de la MS à la sortie Test de répertoire MS Test crée lors de chaque test est exécuté.

C'est ce que mon dossier de sortie de la structure ressemble. (Excuse tout le désordre...)

alt text

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

PRO TIP #2 - si u ne pas utiliser un 2ème argument de chaîne dans l' DeploymentItem d'attribut, alors le fichier sera copié à la racine du dossier, de l'actuel MS Test.

const string fileName = @"Test Data\100LogEntries.txt";

Maintenant, le chemin d'accès au fichier est relatif à l' OUT le dossier pour le cours de MS Test. En tant que tel, j'ai explicitement dit à déployer le fichier dans un répertoire appelé Test Data ... donc j'ai besoin de m'assurer de la référence que correctement dans mon code lorsque je veux lire le fichier.

Juste pour confirmer -> le chemin d'accès complet du fichier est traduit à quelque chose comme C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data .. pour que les états membres actuels de Test.

HTH.

Maintenant vous avez une image d'une Licorne, pour la lecture de tant de choses :)

alt text

15voto

Robert Bernstein Points 288

J'ai pensé que je pourrais partager avec vous un chemin j'ai rencontré des problèmes avec MSTest et les éléments de déploiement. Si vous Debug/Run test une 2ème fois ou plus à partir de la "Résultats de l'Essai" de la fenêtre, il utilise les paramètres d'une exécution précédente. Toutefois, si vous Debug/Exécuter le même test de la "Tester" fenêtre, il utilise les derniers paramètres. J'ai perdu une heure à essayer de comprendre pourquoi des changements de Locaux.testsettings n'ont pas été utilisés lorsque je l'ai gardé départ de Débogage sur le même test de la "Résultats de l'Essai" de la fenêtre.

C'est les Résultats du Test de la fenêtre (ne pas [re]essais de démarrage à partir d'ici après avoir fait des changements de Locaux.testsettings):

The Test Results Window

Et c'est le Test de la fenêtre d'Affichage (FAIRE des essais de démarrage à partir d'ici après avoir fait des changements de Locaux.testsettings):

The Test View Window

J'espère que cela sauve quelqu'un d'un mal de tête à l'avenir.

7voto

acarlon Points 4636

Dans Visual Studio 2012, la sortie de répertoire est le répertoire de travail ce qui signifie que le DeploymentItem attribut n'est pas nécessaire pour le cas général (où vous n'avez pas spécifiques par test ou par classe les éléments de déploiement). Cela signifie que si vous n'avez pas besoin d'utiliser le DeploymentItem attribut si il y a un ensemble de fichiers que vous voulez que tous vos tests ou vous n'êtes pas trop tatillon sur chaque TestClass/TestMethod avoir séparé le déploiement des dépendances.

Vous pouvez simplement cliquer sur Projet | Afficher Tous les Fichiers et inclure les sous-dossiers et les fichiers dans Visual Studio avec le "Copy" ou "Copier si plus récent' attribut de votre projet et les fichiers seront copiés dans votre répertoire de sortie avec la hiérarchie intacte.

La même règle s'applique lors de l'exécution de vstest.console.exe à partir de la ligne de commande. Voir ici pour plus de détails.

Mise à jour

Il y a des cas où le répertoire par défaut ne sera pas le répertoire de sortie. En particulier lorsque vous choisissez Run All Tests le chemin d'accès par défaut serait d'être sous - TestResults\Deploy_... Le même principe s'applique lors de l'utilisation d'un runsettings le fichier ou des tests d'utilisation DeploymentItems

Le répertoire de sortie sera le répertoire par défaut lorsque vous ne l'utilisez pas DeploymentItems et: -

  • Vous cliquez droit sur le test(s) dans Visual Studio et choisissez exécuter / déboguer, ou
  • Vous exécutez à partir de la ligne de commande à l'aide de vstest.console.exe.

1voto

Pritam Karmakar Points 951

Si vous devez séparer les élément de déploiement en cas de test individuels alors s’il vous plaît allez-y et utilisez `` attribut dans chaque cas de test.

0voto

Jackliusr Points 146

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X