Comment utiliser des fichiers de configuration «externes» (c'est-à-dire avec configSource) avec un projet de test d'unité MSTest?

StackOverflow https://stackoverflow.com/questions/152866

  •  02-07-2019
  •  | 
  •  

Question

Par souci de simplicité, je divise généralement une grande partie de ma configuration (le contenu de app.config et web.config) dans des fichiers .config distincts, puis les référence à partir du fichier de configuration principal à l'aide de l'attribut 'configSource'. Par exemple:

<appSettings configSource="appSettings.config"/>

puis en plaçant toutes les paires clé / valeur dans ce fichier appSettings.config au lieu de l'indiquer en ligne dans le fichier de configuration principal:

<appSettings>
    <add key="FirstKey" value="FirstValue"/>
    <add key="SecondKey" value="SecondValue"/>
    ...
</appSettings>

Cela fonctionne généralement très bien avec l'application elle-même, mais je rencontre des problèmes lorsque j'essaie d'écrire des tests unitaires qui, pour une raison quelconque, doivent obtenir une valeur à partir d'une section de configuration stockée dans l'un de ces fichiers externes. (Je comprends que la plupart d’entre elles seraient probablement considérées comme des "tests d’intégration", car elles reposent sur le système de configuration, et j’ai aussi des "tests unitaires purs", mais ce n’est pas le problème. Je suis cherche vraiment à vérifier que ces valeurs de configuration sont récupérées correctement et ont un impact sur le comportement de la bonne manière).

En raison de la manière dont MSTest compile et copie la sortie dans des dossiers à l'apparence confuse qui sont différents de chaque test (plutôt que dans le dossier 'bin' comme vous pourriez le penser), il ne semble jamais pouvoir trouver ces fichiers externes. pendant l'exécution des tests. J'ai essayé de déconner avec des actions post-build pour faire ce travail mais sans chance. Existe-t-il un moyen de copier ces fichiers externes dans le bon dossier de sortie au moment de l'exécution?

Était-ce utile?

La solution

trouvé le:

Si vous modifiez la configuration du test (en double-cliquant sur le fichier .testrunconfig qui est placé dans le dossier de solution 'Eléments de solution' lorsque vous ajoutez un nouveau test unitaire), vous obtenez une boîte de dialogue de configuration du test. Il existe une section intitulée "Déploiement" dans laquelle vous pouvez spécifier des fichiers ou des dossiers entiers à partir de n'importe quel point de la solution, que vous pouvez copier avec les assemblys compilés au moment de l'exécution dans le bon dossier.

De cette manière, je peux maintenant définir la plupart de ma configuration dans un ensemble de fichiers .config externes et les copier automatiquement à l'exécution de chaque test.

Autres conseils

Les configurations d'exécution de test sont un peu délicates lorsque vous essayez d'exécuter des tests en dehors de Visual Studio.

Pour une exécution en ligne de commande à l'aide de MSTest, ils deviennent assez encombrants pour garder "propre". Ils sont également "globaux". à la solution pour que les fichiers externes soient copiés pour chaque projet test.

Je préfère de loin l'attribut DeploymentItem .

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

Rend les tests indépendants des fichiers .testrunconfig.

  1. écrivez ceci dans votre chaîne de connexion. Le premier ConnectionString.config n’existe pas.

    < " connectionStrings configSource = " ConnectionString.config " & > "

  2. ouvrir l'invite de commande (CMD) dans les privilèges d'administrateur.

  3. Créez un lien symbolique portant le nom ConnectionString.config dans le dossier bin / debug.

C: \ Windows \ Systems32 > mklink " C: \ Lien vers un dossier \ .... \ ConnectionString.config " "C: \ Utilisateurs \ Nom \ Dossier d'origine \ ..... \ ... \ Secure ConnectionString.config"

enfin, il crée le fichier de configuration ConnectionString à l’emplacement spécifié. et fonctionne avec succès.

 entrer la description de l'image ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top