Запуск MSTest с тестами для разных баз данных

Я хотел бы спросить, как лучше всего выполнить настройку, подобную следующей: у нас есть скомпилированный набор тестов, и в файле app.config у меня есть 6-7 разных строк подключения к разным базам данных. Я хотел бы запускать набор тестов для каждого соединения, и я надеялся каким-то образом параметризовать этот процесс — что-то вроде установки имени соединения и передачи его в тестовый запуск в качестве параметра. На данный момент я понял, что я могу использовать разные файлы localconfigrun и через элементы развертывания я могу передать файл xml/txt с требуемым значением, но есть ли более приятное и легкое решение? Мне нужно просто отправить пару ключ/значение или простую строку, чтобы настроить мой базовый класс внутри набора тестов.

Я использую tfsbuild, но я могу использовать mstest и в других средах (чистый msbuild и т. д.).

Заранее спасибо.


person user47678    schedule 18.05.2009    source источник


Ответы (1)


У меня была аналогичная проблема. Вот что я сделал:

Мой app.config выглядит так:

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

В этом сценарии у меня есть 2 базы данных, к которым я подключаюсь, и у меня есть 3 разные строки подключения для каждой (разработка, сертификация и производство).

Добавьте это в конец файла проекта (щелкните правой кнопкой мыши проект и выгрузите его). Убедитесь, что вы добавили его перед тегом </project>. (Для этого вам потребуется установить задачи сообщества MSBuild. Их можно бесплатно загрузить по адресу: http://msbuildtasks.tigris.org/ (убедитесь, что вы получаете ночную сборку))

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

Это заменит раздел <appSettings> файла app.config на основе текущей конфигурации. Вам нужно будет сделать новые новые конфигурации (я назвал их Cert и Prod).

Последний шаг — сделать файл для каждой конфигурации (я назвал их DevAppConfig.xml, CertAppConfig.xml, ProdAppConfig.xml)

В каждом файле должно выглядеть так (это для конфигурации сертификации):

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

все это после установки приведет к автоматическому изменению файла, выводимого app.config, в зависимости от конфигурации, которую вы компилируете. Этот код работает как для компиляции в IDE, так и для Team Build.

person Vaccano    schedule 28.05.2009
comment
Да, это возможное решение. Что мы сделали, так это подготовили .localrunconfig для каждой базы данных, а затем в tfsbuild просто выполнили все конфиги один за другим. Спасибо за предложенное решение! - person user47678; 21.09.2009
comment
А в базовом тестовом классе мы просто берем файл конфигурации и используем его для создания правильной базы данных. - person user47678; 21.09.2009