web-dev-qa-db-fra.com

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

J'utilise actuellement la suite standard de tests unitaires 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 diffère selon que j'exécute le test unitaire depuis VS 2008 en utilisant la commande Ctrl-R + Ctrl-T standard par rapport à la commande d'exécution du test unitaire Resharper.

Comment ma méthode TestInitialize peut-elle connaître le chemin d'accès correct aux fichiers de données de test unitaire?

Mise à jour:

Les données de test sont suffisamment importantes pour que je ne veuille pas les insérer dans une chaîne, je préfère donc les conserver en tant que fichier externe. La structure de 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 auquel j'aimerais accéder indépendamment du lanceur de test.

54
BigBrother

Vous dites que l'emplacement du fichier de test différera en fonction du lanceur de test, donc je suppose qu'il est inclus dans le projet et copié avec les DLL.

string path = AppDomain.CurrentDomain.BaseDirectory;

Cela vous donnera le dossier d'où vous exécutez le test.

[Éditer]

Dans Visual Studio.

Resharper -> Options -> Tools -> Unit Testing -> Run Results from: Specified Folder (or change the project output folder of your test project)

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

85
Mikael Svenson

(réponse originale mise à jour pour accepter également les chemins de sortie du projet multi-cibles de base .net)

Il suppose que vos fichiers de données de test se trouvent dans un dossier que vous passez en tant que 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);
}
20
DaniCE

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

Cela signifierait qu'il ne dépendait pas qu'il se trouve à un endroit spécifique et qu'il serait également à l'abri d'une falsification accidentelle.

0
ChrisF