2010-04-22 18 views
4

Je lance un test d'unité C# (VS 2008). Dans le test, j'écris dans les paramètres, ce qui devrait entraîner l'enregistrement des données dans le fichier user.config.C# Test d'unité: écrire dans les paramètres dans le test unitaire ne sauvegarde pas les valeurs dans user.config

Settings.Default.X = "History"; // X is string 
Settings.Default.Save(); 

Mais cela ne crée pas simplement le fichier (j'ai recoupées sous "C: \ Documents and Settings \ HW \ Local Settings \ Application Data").

Si je crée la même chose qu'une application de console, il n'y a aucun problème persistant les données (même code).

Y at-il quelque chose de spécial que je dois envisager de faire dans un test UnitTest?

Répondre

5

Je l'ai essayé avec Visual Studio 2010 sous Windows 7 et l'infrastructure de test d'unité Visual Studio crée en fait un dossier temporaire pour les applications de test dans lequel j'ai trouvé mon fichier user.config avec les paramètres corrects. Je pense que ce pourrait être la même chose sur VS 2008. Le schéma de chemin vers ce dossier est du genre:

chemin Windows 10:

C: \ Users \ $ USER $ \ AppData \ Local \ Microsoft_Corporation \ {UnitTestAdapter__Running__StrongName_ guid} \ {numéro}

Windows Vista/Seven chemin:

C: \ Users \ $ USER $ \ AppData \ local \ Microsoft_Corporation \ TestAppDoma dans {Number}

de chemin Windows XP:

C: \ Documents and Settings \ $ USER $ \ Local Settings \ Microsoft_Corporation \ TestAppDomain {Number}

Bonne chance.

+1

merci beaucoup, vous m'avez beaucoup aidé. Modification mineure: son .. \ Paramètres locaux \ Application Data \ Microsoft_Corporation \ ... pour XP – HorstWalter

1

Les projets de test unitaires ne sont que des bibliothèques de classes. Il n'y a pas de contexte d'application et vous risquez de rencontrer des problèmes car l'objet settings ne sait pas dans quelle application/application déposer le fichier de paramètres.

Je ne suis pas sûr, mais il peut juste être en train de le créer en mémoire.

+0

À mesure que les méthodes de test doivent être exécutées, l'infrastructure de test unitaire instancie les classes de test dans un contexte d'application réel. Ainsi, les tests sont exécutés dans un répertoire du système de fichiers, ce qui implique d'avoir des fichiers de configuration. – Ucodia

+0

Mon erreur appelait Reset() avant de recharger(). Je ne savais pas que Reset() enregistre également dans le même tour, je pensais qu'il réinitialise les valeurs uniquement en mémoire. – HorstWalter

0

Merci pour votre aide, cela a beaucoup aidé à trouver le problème. L'allusion au chemin m'a aidé à «voir ce qui se passe» et à trouver le fauteur de troubles.

BTW, cet extrait

config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal) 
config.FilePath 

est utile de trouver l'emplacement de stockage.

Mon problème était que j'ai appelé Reset() avant de recharger(). En fait, mon scénario de test vérifie si les objets sont stockés correctement, donc il enregistre et recharge les paramètres. Je n'étais pas au courant du fait que Reset() "réinitialise et enregistre sur le disque" - je supposais qu'il ne se réinitialise que dans la mémoire. Je dois seulement appeler Reload().

Étant donné que tous les cas de test ont leur propre répertoire, les paramètres doivent être créés (enregistrés) dans le scénario de test.

+0

Cela peut aider à trouver le fichier user.config mais ne montre pas réellement la configuration de l'utilisateur. Il montre seulement la configuration de l'application. En situation normale, l'application et le fichier de configuration de l'utilisateur appartiennent à des répertoires différents alors faites attention! – Ucodia