2009-10-14 13 views
5

Tous: J'ai un test unitaire qui teste une fonctionnalité nécessitant un fichier d'entrée. Ce test a été construit à l'aide de la fonction de test d'unité intégrée de VS 2008.Test unitaire avec un fichier d'entrée

Mon problème est que le fichier doit être détectable par le test unitaire. Cependant, lorsque le test s'exécute, il s'exécute à partir d'un répertoire "output" temporaire sous le dossier des résultats de test. Il ne peut pas trouver mon fichier d'entrée.

J'ai ajouté le fichier au projet de test unitaire, avec une action de compilation "none", et une copie dans le répertoire de sortie "copy if newer", mais la copie se produit dans le répertoire de sortie normal de VS bin), et non dans le répertoire d'exécution du test unitaire, donc le fichier est introuvable. Je ne veux pas coder les chemins d'accès au fichier, car le test devrait être exécuté pour tous ceux qui vérifient le test unitaire. Je pouvais mettre le fichier d'entrée dans un dossier de solution, et laisser le code de test "découvrir" le fichier en codant en dur un chemin relatif dans l'arbre, mais je me suis dit que cela devait être un problème commun. Il manquait quelque chose.

Répondre

4

Ajoutez le fichier en tant que ressource à votre assembly de test. Ensuite, vous pouvez le charger à l'exécution via Assembly.GetManifestResourceStream dans votre configuration de test.

est ici une méthode pratique que j'utilise pour charger des ressources:

public static class ResLoader 
{   
    public static string AsString<T>(string resName) 
    { 
     using (var reader = new StreamReader(Assembly.GetAssembly(typeof(T)) 
           .GetManifestResourceStream(resName))) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 
} 

T est une classe contenue dans votre ensemble de test.

3

Je moque généralement les ressources externes comme les fichiers et les résultats de la base de données plutôt que d'essayer d'y accéder dans mes tests unitaires. Ce n'est pas toujours facile à faire. Peut-être que si vous nous montrez la méthode en question, nous pourrions vous aider à la rendre plus unité testable.

Questions connexes