2010-09-15 8 views
2

J'ai un certain nombre de classes et méthodes d'essai qui copie un répertoire particulier comme ceci:DeploymentItem échoue répertoires de copie quand il y a des projets de test multiples par solution

[TestClass, DeploymentItem("LanguageData", "LanguageData")] 
public class OcrTests 
{ 
    [TestMethod] 
    public void Can_Capture_Field() 
    { 
     // some code that expects the LanguageData directory to be in the test results Out directory 
    } 

    // etc 
} 

[TestClass] 
public class OcrBuilderTests 
{ 
    [TestMethod, DeploymentItem("LanguageData", "LanguageData")] 
    public void Can_Build_Specific_Ocr_Engine_Implementation() 
    { 
     // some more code that expects the LanguageData directory to be in the test results Out directory 
    } 

    // etc 
} 

Ces essais sont en un seul ensemble et tous les fichiers dans le répertoire LangaugeData, leur Copy to Output Directory est défini sur Copy Always. Tout fonctionne correctement et le répertoire est copié dans le répertoire des résultats de test Out tant que je n'ai qu'un seul ensemble de test chargé dans la solution ou que c'est le seul assemblage testé (c.-à-d. /classe).

Dès que j'ajoute un second ensemble et exécuter tous les tests dans la solution alors que le répertoire ne se duplicable, mais tout autre DeploymentItems qui ne sont que des fichiers individuels semblent copiés bien.

Les tests eux-mêmes sont toujours exécutés, mais ceux qui dépendent de ce répertoire tombent en panne. Vraisemblablement parce que MSTest ne peut pas trouver le répertoire - peut-être s'attend-il à ce qu'il soit dans le répertoire de construction de l'un des autres assemblages de test?

Avez-vous des idées sur le fait que plusieurs projets de test empêchent la copie, et que puis-je faire pour la contourner, sans ajouter tous les fichiers de ce répertoire comme un DeploymentItem individuel?

Répondre

1

Cette question est assez ancienne, mais pourrait encore profiter aux autres. D'autant plus que je fini par ici :)

Il semble que DeploymentItemAttribute ne prend pas en charge en utilisant le même nom de chemin source dans plusieurs classes de test. Remarque: J'ai indiqué le même nom de chemin, pas de dossier physique (pensez à des projets de test différents avec le même nom de dossier à déployer). Cependant, le nom du dossier de destination peut être différent, sans effets secondaires.

Ma suggestion est:

  1. Créer une classe de base de fixation (si vous préférez, dans le projet séparé)
  2. Ajoutez l'attribut: [TestClass, DeploymentItem("LanguageData", "LanguageData")]
  3. Changer vos OcrTests et OcrBuilderTests classes pour hériter de la nouvelle classe .
  4. N'oubliez pas de supprimer les attributs deploymentitem pour « LanguageData » de OcrTests et OcrBuilderTests

Je l'ai essayé, avec beaucoup de succès. Dans mon cas, j'avais un projet commun d'appareils de test et plusieurs projets de test, chacun utilisant la classe de base.

Malheureusement, le DeploymentItemAttribute est rempli avec Gotchas, voir here pour plus d'informations.

0

Essayé votre approche mais il n'a pas copié le dossier correctement, donc ce que je l'ai fait à la place copier des fichiers non répertoires (peut-être que cela aide quelqu'un):

[TestClass] 
[DeploymentItem("connectionStrings.config")] 

// should be able to do this, but it does not work always, only sometimes 
//[DeploymentItem("Configs", "Configs")] 

// this instead should work always 
[DeploymentItem("Configs\\file1.txt", "Configs")] 
[DeploymentItem("Configs\\file2.txt", "Configs")] 
[DeploymentItem("Configs\\file3.txt", "Configs")] 
..... 
[DeploymentItem("Configs\\filen.txt", "Configs")] 
public class BaseTests 
{ 
} 
+0

De mon expérience, cela n'ajoute pas les autres fichiers . Cela semble juste ajouter le premier. – Fatlad