63 votes

Chemin d'accès aux fichiers de données de test pour les tests unitaires

J'utilise actuellement la suite standard de tests unitaires de Microsoft dans VS 2008. ReSharper 4.5 est également installé. Mes tests unitaires reposent sur une méthode TestInitialize qui précharge un fichier de données. Le chemin d'accès à ce fichier de données de test sera différent selon que j'exécute le test unitaire à partir de VS 2008 en utilisant la commande standard Ctrl-R + Ctrl-T ou la commande d'exécution du test unitaire de Resharper.

Comment ma méthode TestInitialize peut-elle connaître le chemin correct vers les fichiers de données des tests unitaires ?

Mise à jour :

Les données de test sont suffisamment importantes pour que je ne veuille pas les insérer dans une chaîne de caractères et que je préfère les conserver dans un fichier externe. La structure des fichiers de mon projet de test est celle du projet de test unitaire standard créé avec une application MVC. Sous la racine du projet de test, un nouveau dossier a été créé, appelé "Test Data". C'est à ce dossier que j'aimerais accéder, quel que soit le gestionnaire de test.

94voto

Mikael Svenson Points 18243

Vous dites que l'emplacement du fichier de test diffère selon le programme d'exécution des tests, je suppose donc qu'il est inclus dans le projet et copié avec les dll.

string path = AppDomain.CurrentDomain.BaseDirectory;

Cela vous permettra d'obtenir le dossier à partir duquel vous exécutez le test.

[Edit]

Dans Visual Studio.

Resharper -> Options -> Outils -> Test unitaire -> Exécuter les résultats à partir de : Dossier spécifié (ou changer le dossier de sortie de votre projet de test)

Où vous pouvez spécifier le dossier de vos données de test, ou relatif au dossier spécifié.

1 votes

Un grand merci. Je me suis amusé à utiliser l'ExecutingAssembly et j'ai obtenu un chemin étrange pointant profondément dans mon profil Windows. Les données de test n'étaient nulle part en vue...

1 votes

Notez que cela vous donne le chemin d'accès au \bin\Debug o \bin\Release dans le projet Test, comme " C:\Yadda\MyProject\bin\Debug "

1 votes

Notez également, au moins pour Visual Studio 2019, que si vous placez votre fichier dans un sous-dossier de la solution, la structure du dossier est conservée lors de la copie. Et bien sûr, assurez-vous que votre fichier possède la propriété "Copy always" ou "Copy if newer", dans l'explorateur de solutions.

24voto

DaniCE Points 948

(réponse originale mise à jour pour accepter également les chemins de sortie des projets multi-cibles .net core)

Il suppose que vos fichiers de données de test se trouvent dans un dossier que vous passez en paramètre "testDataFolder" à l'intérieur d'un dossier racine "Test_Data" :

public static string GetTestDataFolder(string testDataFolder)
{
    string startupPath = ApplicationEnvironment.ApplicationBasePath;
    var pathItems = startupPath.Split(Path.DirectorySeparatorChar);
    var pos = pathItems.Reverse().ToList().FindIndex(x => string.Equals("bin", x));
    string projectPath = String.Join(Path.DirectorySeparatorChar.ToString(), pathItems.Take(pathItems.Length - pos - 1));
    return Path.Combine(projectPath, "Test_Data", testDataFolder);
}

0 votes

Que dois-je inclure pour utiliser ApplicationEnvironment ?

1 votes

@miguelmpn vous pouvez utiliser AppDomain.CurrentDomain.BaseDirectory

0 votes

Paquet Nuget pour ApplicationEnvironment ?

0voto

ChrisF Points 74295

Je créerais les données de test à partir de zéro dans la routine d'initialisation de la suite de tests.

Cela signifie qu'il n'est pas nécessaire qu'il se trouve à un endroit précis et qu'il est protégé contre les manipulations involontaires.

1 votes

J'ai une bibliothèque qui fait beaucoup de maths. Je veux m'assurer que j'obtiens les résultats attendus pour une variété d'entrées. Chaque test implique 2 coordonnées d'entrée et un résultat, ce qui me laisse 9 chiffres par test. Je préférerais avoir un fichier contenant mes entrées plutôt qu'un tas de copier/coller.

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