Lorsque je crée un projet de test unitaire avant l'exécution des tests, la sortie du test est copiée dans un dossier TestResults, puis les tests sont exécutés. Le problème que j'ai est que tous les fichiers du répertoire Debug / bin ne sont pas copiés dans le projet TestResults.
Comment puis-je obtenir un fichier copié dans le répertoire Debug / bin pour qu'il soit également copié dans le dossier TestResults?
c#
.net
visual-studio-2008
unit-testing
mstest
Eric Schoonover
la source
la source
Vous pouvez spécifier un attribut de déploiement comme dans l'exemple ci-dessous; Vous devez également définir la propriété "Contenu" et "Copier si plus récent" (il n'y a pas de documentation sur les paramètres ultérieurs, mais vous les avez définis pour que cela fonctionne.
la source
J'ai dû activer "Activer le déploiement" sous
Test -> Edit Test Settings -> Local -> Deployment
pour que l'[DeploymentItem]
attribut fonctionne.la source
Les trois réponses sont correctes, selon 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 indépendants 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 de test.
Dans mes tests, je dois copier un fichier XML attendu dans le dossier de sortie de test pour le comparer avec le XML de sortie de test réel. J'utilise l'attribut DeploymentItem pour copier uniquement le fichier XML lié au (x) test (s) en cours d'exécution. Dans VS2010, j'ai dû activer le déploiement dans le fichier .testsettings (mais n'ajouter aucun chemin), puis référencer le chemin du fichier XML relatif au TestProject dans DeploymentItem.
J'espère que cela t'aides.
la source
J'ai eu un problème similaire mais le mien avait à voir avec le fait de pointer vers 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.
la source
Je voudrais simplement améliorer la réponse acceptée en mentionnant un moyen de le faire déployer spécifiquement pour les dll plutôt que la méthode normale de l'utiliser pour les données ou la configuration, etc., pour les circonstances où CopyLocal ne fonctionne pas:
la source
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 dossiers que vous souhaitez déployer dans un dossier du répertoire du projet de test.
2) Dans les propriétés du projet, créez une étape de post-construction
$(ProjectDir)
et$(TargetDir)
sont des macros qui seront interprétées par VS et doivent être incluses comme telles.<Project_Folder_Name>
est le nom du dossier créé à l'étape 1.<Deployment_Folder_Name>
est le nom du dossier dans lequel les fichiers de test seront déployés et doit être nommé de manière à ce qu'il soit unique lorsque plusieurs projets de test sont déployés dans le même répertoire, par exemple<Project_Name>_TestInputs
.Les fichiers de test dans des emplacements partagés doivent également être copiés dans le dossier de déploiement du répertoire cible pour limiter les interactions de test. Fournissez le chemin source par rapport à la
$(ProjectDir)
macro. Par exemple"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"
.3) Ajoutez une
[DeploymentItem(source, destination)]
propriété à chaque méthode de test qui utilise un fichier de déploiement (meilleure pratique) ou à la classe de test (pratique plus facile 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 de paramètres de test ).Dans 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 lexcopy
etdestination
est le chemin du répertoire dans lequel il sera créé par rapport au répertoire de déploiement. Pour que les tests s'exécutent de manière cohérente dans le répertoire cible ou dans un répertoire de déploiement. Le chemin de destination doit être le même que le chemin source sans référence de fichier. Exemple:[DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]
. LeDeploymentItem
doit être inclus dans chaque méthode qui utilise ce fichier ou ce répertoire.Sur une classe,
source
etdestination
sont à la fois le nom du dossier créé dans le répertoire cible par lexcopy
; cela copiera le dossier entier dans le répertoire de déploiement lorsqu'un test de la classe est exécuté. 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 en toute confiance, ils seront dans le répertoire de travail quel que soit l'endroit où Visual Studio a décidé de le placer ce jour-là, par exemple
File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")
.la source
Essayez la ligne de commande d'événement post-build à partir de Visual Studio (si vous utilisez cet IDE).
la source
Dans Visual Studio 2012, vous n'avez pas besoin d'un attribut DeploymentItem pour le cas simple. Voir ma réponse ici
la source
la source
La réponse acceptée est correcte, tout comme la plupart des autres réponses. Cependant, au fil des ans, j'ai constaté que le système Deploment de tests unitaires Visual Studio utilisant DeploymentAttribtue et Copy to Output était fastidieux si vous avez un grand nombre de fichiers de données. J'ai constaté que conserver les fichiers dans 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 t'aides.
la source