使用针对不同数据库的测试运行MSTest

时间:2009-05-18 14:11:28

标签: database orm tfs mstest tfsbuild

我想问一下执行如下设置的最佳方法是什么: 我们有编译的测试套件,在app.config文件中我有6-7个不同的连接字符串到不同的数据库。我想针对每个连接运行测试套件,我希望以某种方式对这个过程进行参数化 - 比如设置连接的名称并将其作为参数传递给testrun。到目前为止我想到的是我可以使用不同的localconfigrun文件,通过部署项目,我可以提供具有所需值的xml / txt文件,但是有更好更轻的解决方案吗?我只需要发送一个键/值对或简单的字符串来配置我在测试套件中的基类。

我正在使用tfsbuild,但我也可以使用mstest thrugh其他环境(纯msbuild等)

提前致谢。

1 个答案:

答案 0 :(得分: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个dbs,每个都有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>

这将根据当前配置替换app.config文件的<appSettings>部分。您需要进行新的配置(我称之为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中的编译。