2009-05-18 20 views
0

Je voudrais demander quelle est la meilleure façon d'exécuter une installation comme celle-ci: Nous avons une suite de tests qui est compilée, et dans le fichier app.config j'ai 6-7 différent chaînes de connexion à différentes bases de données. Je voudrais exécuter la suite de tests contre chaque connexion, et j'espérais paramétrer d'une certaine manière ce processus - quelque chose comme définir le nom de la connexion et le transmettre au testrun en tant que paramètre. Ce que j'ai compris jusqu'ici est que je peux utiliser différents fichiers localconfigrun et à travers des éléments de déploiement je peux alimenter un fichier xml/txt avec la valeur requise, mais y a-t-il une solution plus agréable et plus légère? J'ai juste besoin d'envoyer une paire clé/valeur ou une simple chaîne pour configurer ma classe de base dans la suite de tests.Exécuter MSTest avec des tests sur différentes bases de données

J'utilise tfsbuild mais je peux utiliser le MSTest thrugh autres environnements aussi bien (msbuild pur, etc.)

Merci à l'avance.

Répondre

1

J'ai eu un problème similaire. Voilà ce que je l'ai fait:

Mon app.config ressemble à ceci:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="ConenctToInputDB" value="InputDev" /> 
    <add key="ConnectToOutputDB" value ="OutputDev"/> 
    <add key="ClientSettingsProvider.ServiceUri" value="" /> 
    </appSettings> 
    <connectionStrings> 
    <add name="LocalConnection" connectionString="YOUR CONNECTION STRING HERE" /> 
    <add name="InputDev" connectionString="YOUR CONNECTION STRING HERE" /> 
    <add name="InputCert" connectionString="YOUR CONNECTION STRING HERE"/> 
    <add name="OutputDev" connectionString="YOUR CONNECTION STRING HERE/> 
    <add name="OutputCert" connectionString="YOUR CONNECTION STRING HERE" /> 
    <add name="InputProd" connectionString="YOUR CONNECTION STRING HERE/> 
    <add name="OutputProd" connectionString="YOUR CONNECTION STRING HERE" /> 
    </connectionStrings> 

Dans ce secenario, je 2 dbs me connecter à et j'ai 3 chaînes de connexion différentes pour chaque (développement, certification et Production)

Ajoutez ceci au bas de votre fichier de projet (faites un clic droit sur le projet et déchargez-le). Assurez-vous de l'ajouter avant le tag </project>. (Vous devrez installer les tâches communautaires MSBuild pour que cela fonctionne Ils peuvent être téléchargés gratuitement à partir de:. http://msbuildtasks.tigris.org/ (Assurez-vous d'obtenir une nightly build))

<PropertyGroup> 
    <!--Import the MSBuild community tasks so we can update xml--> 
    <MSBuildCommunityTasksPath>C:\PathToMSBuildCommunityTasks\MSBuildTasks</MSBuildCommunityTasksPath> 
    <SubstitutionsFile Condition="'$(Configuration)' == 'Debug'">DevAppSettings.xml</SubstitutionsFile> 
    <SubstitutionsFile Condition="'$(Configuration)' == 'Cert'">CertAppSettings.xml</SubstitutionsFile> 
    <SubstitutionsFile Condition="'$(Configuration)' == 'Prod'">ProdAppSettings.xml</SubstitutionsFile> 
    </PropertyGroup> 
    <Import Project="C:\PathToMSBuildCommunityTasks\lib\MSBuildTasks\MSBuild.Community.Tasks.Targets" /> 
    <Target Name="AfterBuild"> 
    <!--Update the app config to have the correct environment paths--> 
    <Message Text="Updating $(MSBuildProjectName) config to $(Configuration)" Importance="high"></Message> 
    <XmlMassUpdate ContentFile="$(OutDir)\$(MSBuildProjectName).dll.config" SubstitutionsFile="..\..\$(SubstitutionsFile)" /> 
    </Target> 

Cela remplacera la section <appSettings> de l'application Fichier .config basé sur la configuration actuelle. Vous devrez faire de nouvelles configurations (je les ai appelées Cert et Prod).

La dernière étape consiste à créer un fichier pour chaque configuration (je les ai appelés DevAppConfig.xml, CertAppConfig.xml, ProdAppConfig.xml)

Dans chaque fichier devrait ressembler à ceci (celui-ci est pour la configuration de certification):

<?xml version="1.0" encoding="utf-8"?> 
<!--This file is used by the build files to merge in solution wide app settings 
Some projects contain files that have an AppSetting section (usually in App.config). Those projects have 
and AfterBuild event in the project file that substitues this xml tree over the the normal xml tree.--> 
<configuration xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate"> 
    <appSettings> 
    <add xmu:key="key" key="ConenctToInputDB" value="Cert"/> 
    <add xmu:key="key" key="ConnectToOutputDB" value="ESPCert"/> 
    </appSettings> 
</configuration> 

tout cela, une fois installé fera le fichier qui est sortie par app.config soit automatiquement modifiée en fonction de la configuration que vous compilez. Ce code fonctionne à la fois pour la compilation dans l'EDI et dans Team Build.

+1

Oui, c'est une solution possible. Ce que nous avons fait est de préparer un fichier .localrunconfig pour chaque base de données, puis dans le fichier tfsbuild d'exécuter toutes les configurations les unes après les autres. Merci pour la solution proposée! – user47678

+1

Et dans la classe de test de base, nous prenons simplement le fichier de configuration, et l'utilisons pour instancier la bonne base de données. – user47678