Comment puis-je obtenir & # 8220; Copier dans le répertoire de sortie & # 8221; travailler avec des tests unitaires?

StackOverflow https://stackoverflow.com/questions/227545

Question

Lorsque je crée un projet de test unitaire avant que les tests ne soient exécutés, la sortie du test est copiée dans un dossier TestResults, puis les tests sont exécutés. Le problème que je rencontre est que tous les fichiers du répertoire Debug / bin ne sont pas copiés dans le projet TestResults.

Comment puis-je copier un fichier copié dans le répertoire Debug / bin dans le dossier TestResults?

Était-ce utile?

La solution

Pour ce faire, spécifiez le éléments de déploiement dans le fichier .testrunconfig , accessible via l’élément Modifier les configurations de test dans la Menu Test de Visual Studio ou dans le dossier Eléments de solution .

Autres conseils

Vous pouvez spécifier un attribut de déploiement comme dans l'exemple ci-dessous. Vous devez également définir "Contenu". & amp; " Copier si plus récent " propriété (il n’existe pas de documentation sur les derniers paramètres, mais vous les avez configurés pour que cela fonctionne.

[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{



}

Je devais activer "Activer le déploiement". sous Test - > Modifier les paramètres de test - > Local - > Déploiement pour que l'attribut [DeploymentItem] fonctionne.

Les trois réponses sont correctes, en fonction de vos besoins.

L'ajout de fichiers à déployer dans .testrunconfig (.testsettings dans VS2010) copiera tous ces fichiers dans chaque dossier de sortie de test, même pour des tests non liés exécutés de manière isolée. Si vous exécutez un test, tous les fichiers de données de test répertoriés dans la section de déploiement de .testssettings seront copiés dans le dossier de sortie du test.

Lors de mes tests, je dois copier un fichier XML attendu dans le dossier de sortie de test pour le comparer au XML de sortie de test réel. J'utilise l'attribut DeploymentItem pour copier uniquement le fichier XML associé au (x) test (s) en cours d'exécution. Dans VS2010, je devais activer le déploiement dans le fichier .testsettings (sans ajouter de chemin), puis faire référence au chemin du fichier XML relatif au TestProject dans DeploymentItem.

J'espère que cela vous aidera.

J'avais un problème similaire, mais le mien avait à voir avec le fichier TraceAndTestImpact.testsettings au lieu du fichier Local.testsettings. Vous pouvez passer de l’un à l’autre dans le menu Test / Sélectionner les paramètres de test actifs.

Ce qui suit fonctionne dans VS2012 pour les projets de test inclus dans plusieurs solutions sans utiliser de fichier testsettings:

1) Organisez les fichiers et les dossiers que vous souhaitez déployer dans un dossier du répertoire du projet test.

2) Dans les propriétés du projet, créez une étape de post-génération

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"

$ (ProjectDir) et $ (TargetDir) sont des macros qui seront interprétées par VS et doivent être incluses en tant que telles.

< Nom du dossier de projet > est le nom du dossier créé à l'étape 1.

< Nom_dossier_de_déploiement > est le nom du dossier dans lequel les fichiers de test vont être déployés et doit être nommé afin qu'il soit unique lorsque plusieurs projets de test sont déployés dans le même répertoire, par exemple. < Nom_projet > _TestInputs .

Les fichiers de test situés dans des emplacements partagés doivent également être copiés dans le dossier de déploiement du répertoire cible afin de limiter les interactions de test. Indiquez le chemin source par rapport à la macro $ (ProjectDir) . Par exemple, " $ (Rép_Projet) .. \ .. \ Fichiers communs \ C1219TDL-2008.xml " .

3) Ajoutez une propriété [DeploymentItem (source, destination)]] à chaque méthode de test utilisant un fichier de déploiement (pratique recommandée) ou à la classe de test (pratique plus simple pour les paresseux ou pressés). et le moyen le plus simple de mettre à jour un projet les chemins relatifs précédemment utilisés ou un fichier testsettings).

Sur une méthode de test, source est le chemin du fichier ou du répertoire utilisé dans la méthode de test par rapport au répertoire cible créé par xcopy et . destination est le chemin du répertoire dans lequel il sera créé par rapport au répertoire de déploiement. Ainsi, les tests sont exécutés de manière cohérente dans le répertoire cible ou dans un répertoire de déploiement. Le chemin de destination doit être identique au chemin source sans référence de fichier. Exemple: [DeploymentItem ("Example_TestInputs \ C1219TDL-2008.xml", "Example_TestInputs")]] . Le DeploymentItem doit être inclus sur chaque méthode qui utilise ce fichier ou ce répertoire.

Dans une classe, source et destination sont tous deux le nom du dossier créé dans le répertoire cible par le xcopy ; Cela copiera l'intégralité du dossier dans le répertoire de déploiement lors de l'exécution d'un test de la classe. Exemple: [DeploymentItem ("Example_TestInputs", "Example_TestInputs")]]

4) Dans les méthodes de test, vous pouvez désormais accéder aux fichiers et aux répertoires avec la certitude qu’ils se trouveront dans le répertoire de travail, où Visual Studio a décidé de le placer ce jour-là, par exemple. Fichier.Existe (". \ Example_TestInputs \ C1219TDL-2008.xml ") .

Je voudrais simplement améliorer la réponse acceptée en mentionnant un moyen de le déployer spécifiquement pour les dll plutôt que la méthode habituelle de l’utiliser pour les données ou la configuration, etc., dans les cas où CopyLocal ne fonctionne pas:

[DeploymentItem("bin\\release\\iRock.dll")]
[DeploymentItem("bin\\debug\\iRock.dll")]

Essayez la ligne de commande de l'événement Post-Build à partir de Visual Studio (si vous utilisez cet IDE).

Dans Visual Studio 2012, vous n'avez pas besoin d'un attribut DeploymentItem pour le cas simple. Voir ma réponse ici

[TestMethod]
[DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")]
public void YourTestMethod()
{
   // in the method you are testing you should have this:
   var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml";
}

La réponse acceptée est correcte, de même que la plupart des autres réponses. Cependant, au fil des années, j’ai constaté que le système Deploment des tests unitaires Visual Studio utilisant DeploymentAttribtue et Copier en sortie était encombrant si vous disposiez d’un grand nombre de fichiers de données. J'ai constaté que le maintien des fichiers à leur emplacement d'origine fonctionnait mieux.

Tous les détails dans mon autre réponse ici. https://stackoverflow.com/a/53004985/2989655

J'espère que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top