2009-05-18 11 views
0

Ich möchte fragen, was der beste Weg ist, um ein Setup wie folgt auszuführen: Wir haben Testsuite, die kompiliert wird, und in der app.config-Datei habe ich 6-7 verschiedene Verbindungszeichenfolgen zu verschiedenen Datenbanken. Ich würde gerne die Testsuite gegen jede Verbindung laufen lassen, und ich habe gehofft, diesen Prozess irgendwie zu parametrisieren - etwas wie den Namen der Verbindung zu setzen und ihn als Parameter an die Testrou zu übergeben. Was ich bis jetzt herausgefunden habe ist, dass ich verschiedene localconfigrun Dateien benutzen kann und durch Deployment Items kann ich eine XML/TXT Datei mit dem benötigten Wert füttern, aber gibt es eine schönere und leichtere Lösung? Ich brauche nur ein Schlüssel/Wert-Paar oder eine einfache Zeichenfolge zu senden, um meine Basisklasse innerhalb der Testsuite zu konfigurieren.Ausführen von MSTest mit Tests gegen verschiedene Datenbanken

Ich verwende tfsbuild aber ich die mstest thrugh andere Umgebungen als auch (reine msbuild, etc.)

Vielen Dank im Voraus verwenden kann.

Antwort

1

Ich hatte ein ähnliches Problem. Das ist, was ich tat:

Meine app.config wie folgt aussieht:

<?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> 

In diesem secenario, ich habe 2 dbs ich eine Verbindung zu und ich habe 3 verschiedene Verbindungszeichenfolgen für jede (Entwicklung, Zertifizierung und Produktion)

Fügen Sie dies am Ende Ihrer Projektdatei hinzu (klicken Sie mit der rechten Maustaste auf das Projekt und entladen Sie es). Stellen Sie sicher, dass Sie es vor dem Tag </project> hinzufügen. (Sie müssen die MSBuild Community-Aufgaben installieren, für diese arbeiten Sie können von kostenlos heruntergeladen werden. http://msbuildtasks.tigris.org/ (Vergewissern Sie sich ein Nightly Build erhalten))

<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> 

Dieser ersetzt den <appSettings> Bereich der App .config-Datei basierend auf der aktuellen Konfiguration. Sie müssen neue Konfigurationen vornehmen (ich nannte sie Cert und Prod).

Der letzte Schritt eine Datei für jede Konfiguration zu machen (ich nannte sie DevAppConfig.xml, CertAppConfig.xml, ProdAppConfig.xml)

In jeder Datei sollte wie folgt aussehen (dies für die Zertifizierung ist die Konfiguration):

<?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> 

all dies wird einmal installiert, um die Datei zu machen, die Ausgabe von app.config auto verändert basierend auf der Konfiguration sein ist Sie kompilieren. Dieser Code funktioniert sowohl für das Kompilieren in der IDE als auch in Team Build.

+1

Ja, das ist eine mögliche Lösung. Wir haben eine .localrunconfig für jede Datenbank vorbereitet und dann im tfsbuild, um alle Konfigurationen nacheinander auszuführen. Danke für die vorgeschlagene Lösung! – user47678

+1

Und in der Basis-Test-Klasse, greifen wir einfach die Konfigurationsdatei und verwenden Sie sie, um die richtige Datenbank zu instanziieren. – user47678

Verwandte Themen