如何:从 Team Foundation Build 中运行数据库单元测试

更新:2007 年 11 月

可以使用 Team Foundation Build 在版本验证测试 (BVT) 过程中运行数据库单元测试。可以降数据库单元测试配置为部署数据库、生成测试数据并运行选定的测试。如果您不熟悉 Team Foundation Build,则应当先了解以下信息,然后再按照本主题中的过程操作:

在执行这些过程之前,必须先执行下列任务来配置工作环境:

  • 安装 Team Foundation Build 和 Team Foundation 版本控制,可以将它们作为独立的产品安装,也可以将它们作为 Visual Studio Team System 的一部分安装。可能需要将 Team Foundation Build 和 Team Foundation 版本控制安装到不同的计算机上。

  • 在客户端计算机上安装 团队资源管理器。

  • 将 Visual Studio 用户会话连接到运行 Team Foundation Server 的计算机。有关如何连接到 Team Foundation Server 的更多信息,请参见如何:连接到 Team Foundation Server

配置完工作环境后,必须在 Visual Studio Team System Database Edition 中按照以下步骤操作: 

  1. 创建一个数据库项目。

  2. 为数据库项目导入或创建架构和对象。

  3. 针对生成和部署配置数据库项目属性。

  4. 创建一个或多个数据库单元测试。

  5. 将包含该数据库项目和数据库单元测试项目的解决方案添加到版本控制中,并签入所有文件。

本主题中的过程介绍如何创建一个生成定义,以便在自动化测试运行的过程中运行数据库单元测试:

  1. 创建包含您要运行的数据库单元测试的测试列表。

  2. 签入该测试列表。

  3. 创建生成定义,指定该测试列表应当作为此生成的一部分运行。

  4. 修改此生成定义,将 app.config 文件复制到 Team Foundation Build 的正确位置。

  5. 签入更新后的生成定义。

  6. 运行新的生成定义。

在生成计算机上运行数据库单元测试

当在生成计算机上运行数据库单元测试时,单元测试可能无法找到数据库项目文件 (.dbproj) 或数据生成计划 (.dgen)。之所以出现此问题,是因为 app.config 文件使用相对路径引用这些文件。此外,如果数据库单元测试无法找到要用于运行它们的 SQL Server 的实例,则测试可能失败。如果 app.config 文件中存储的连接字符串在生成计算机上无效,则会出现此问题。

若要解决这些问题,必须创建要用于 Team Foundation Build 的 app.config 文件。在本示例中,该文件名为 app.TeamBuild.config。在该文件中,必须指定正确的路径和连接字符串,以供 Team Foundation Build 在生成计算机上运行时使用。您可以使用后期生成目标将该文件复制到“程序集名称.config”中。复制该文件时,将覆盖包含开发人员在其本地开发计算机上运行单元测试时所使用的值的 .config 文件。

说明:

生成数据库项目之前,必须为运行 Team Foundation Build 的计算机上的服务帐户配置设计时验证数据库的实例。若要配置该实例,可以在生成计算机上将 Visual Studio 作为服务帐户运行。另一种方法是使用以下命令行创建必需的注册表项(请根据您的配置将占位符替换为相应的名称):

Runas /user:[DOMAIN\生成服务用户名] "REG ADD HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\DBPro\DialogPage\Microsoft.VisualStudio.TeamSystem.Data.DBProject.Settings.DataConnectionOptionsSettings /v SQL Server 名称 /d [本地实例名称]"

创建测试列表

创建包含数据库单元测试的测试列表

  1. 在“测试列表编辑器”窗口中的“分组依据”列表中,单击“测试列表全名”以显示测试列表窗格。

  2. 右击“测试列表”,再单击“新建测试列表”。

    随即出现“创建新测试列表”对话框。

  3. 键入将包含您的数据库单元测试的测试列表的名称。(例如,键入“数据库单元测试”。)

  4. (可选)键入数据库单元测试列表的说明,并在测试列表层次结构中指定要放置新的测试列表的位置。

  5. 单击“确定”。

    随即将创建测试列表,并将其显示在测试列表层次结构窗格中。

  6. 单击“所有已加载的测试”显示解决方案中的所有测试。

  7. 将您希望作为数据库单元测试运行的测试拖动到刚刚创建的测试列表中。

    说明:

    若要同时拖动多个测试,请按住 Ctrl 键单击每个测试。若要拖动某一连续区块中的测试,请单击其中的第一个测试,然后按住 Shift 键单击该区块中的最后一个测试。不要使用复选框进行此操作。

  8. (可选)若要验证测试列表的内容,请将其签入测试列表层次结构窗格中。

    创建的测试列表与解决方案中的所有测试列表一起存放在解决方案的测试元数据文件中。测试元数据文件的扩展名为 .vsmdi。有关更多信息,请参见使用测试列表

签入测试列表

在此过程中,将签入解决方案的所有文件。这些文件包括解决方案的测试元数据文件,该文件包含测试列表和测试。只要您添加、删除、重新组织或更改测试列表的内容,测试元数据文件就会自动更新以反映这些更改。

说明:

此过程介绍的是使用 Team Foundation 版本控制 时执行的步骤。如果您使用的是其他版本控制软件,则必须按照该软件的相应步骤操作。

签入测试列表

  1. 连接到运行 Visual Studio Team System Team Foundation Server 的计算机。有关更多信息,请参见如何:连接到 Team Foundation Server

  2. 如果解决方案尚不在源代码管理中,请将其添加到源代码管理中。有关更多信息,请参见如何:向版本控制添加项目或解决方案

  3. 单击“视图”,再单击“挂起签入”显示“挂起签入”窗口。

  4. 签入解决方案的所有文件。有关更多信息,请参见如何:签入挂起的更改

    说明:

    如果您使用的是 Visual Studio Team System,则可以使用一个特定的团队过程来控制自动测试的创建和管理。例如,该过程可能会要求在签入代码以及将在该代码上运行的测试之前在本地对版本进行验证。

    在完成签入操作之后,“解决方案资源管理器”中每个文件的旁边将出现一个锁形图标,指示该文件已签入。

    已签入的测试可由 Visual Studio Team System 的 Team Foundation Build 功能使用。您现在可以创建包含要运行的测试的生成定义。

创建生成定义

创建生成定义

  1. 在 团队资源管理器 中,单击您的团队项目。

  2. 右击“生成”,再单击“新建生成定义”。

    将显示“生成定义”对话框。

  3. 填写“生成定义”对话框中的各部分。有关更多信息,请参见如何:创建生成定义

    重要说明:

    Team Foundation Build 使用 MSBuild 项目文件。在 MSBuild 项目选项中,必须选中“运行测试”复选框,并指定测试元数据文件,该文件应包含您在创建测试列表中创建的测试列表。最后,必须指定包含您要运行的测试的测试列表。

  4. 在向导中提供信息后,单击“完成”。

    团队资源管理器窗口中的“生成”文件夹下将显示新的生成定义。

修改测试项目

默认情况下,Team Foundation Build 在生成单元测试项目时会基于项目的 app.config 文件创建一个配置文件。数据生成计划的路径和数据库项目的路径以相对路径的形式存储在该 app.config 文件中。由于 Team Foundation Build 放置生成文件的位置已经改变(相对于运行单元测试的位置),因此在 Visual Studio 中有效的相对路径将不再有效。另外,app.config 文件还包含指定要测试的数据库的连接字符串。如果单元测试必须连接到的数据库不同于创建测试项目时使用的数据库,则还需要为 Team Foundation Build 创建一个单独的 app.config 文件,通过执行下一过程中的修改,可以设置测试项目和生成服务器,以使 Team Foundation Build 使用不同的配置。

重要说明:

必须为每个测试项目(.vbproj 或 .vsproj)执行此过程。

对 Team Foundation Build 使用不同的 app.config 文件

  1. 在“解决方案资源管理器”中,右击要修改的测试项目文件(.vbproj 或 .csproj),然后单击“签出以进行编辑”。

    将出现“签出”对话框。

  2. 单击“签出”。

  3. 在“文件”菜单上单击“关闭解决方案”。

    必须关闭解决方案,因为只要包含项目文件的解决方案处于打开状态,就无法修改此项目文件。

    说明:

    此外,还可以先卸载项目,并在修改完毕后再重新加载该项目。

  4. 在“文件”菜单上,指向“打开”,再单击“文件”。

  5. 浏览至步骤 1 中的测试项目文件,然后双击该文件以在编辑器中将其打开。

  6. 滚动至该文件的底部,然后在用于导入 Visual Basic 或 Visual C# .Targets 文件的元素(以“<Import Project=”开头)后添加下面的代码:

    <Import Condition="'$(TeamBuildConstants)' != ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\TeamData\Microsoft.VisualStudio.TeamSystem.Data.TeamBuild.targets"/>
    <Target Name="AfterBuild" DependsOnTargets="$(AfterBuildTeamBuildTargets)">
    </Target>
    
  7. 在“文件”菜单上单击“保存 文件名”。

  8. 在运行 Team Foundation Build 的计算机上,浏览至文件夹 %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v9.0\TeamData。

  9. 在该文件夹中,创建一个名为 Microsoft.VisualStudio.TeamSystem.Data.TeamBuild.Targets 的文件,并使其包含以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup> 
    <AfterBuildTeamBuildTargets>RenameTeamBuildConfig</AfterBuildTeamBuildTargets>
    </PropertyGroup>
    <ItemGroup>
    <__TeamBuildConfig Include="$(OutDir)$(TargetFileName).config"/>
    </ItemGroup>
    
    <Target Name="RenameTeamBuildConfig">
    
    <CreateItem Include="app.TeamBuild.config">
    <Output ItemName="TeamBuildAppConfig" TaskParameter="Include" />
    </CreateItem>
    
    <Copy SourceFiles="@(TeamBuildAppConfig)" DestinationFiles="@(__TeamBuildConfig)" />
    </Target>
    
    </Project> 
    
    说明:

    如果为配置文件提供的名称不是 app.TeamBuild.config,则应替换该 XML 中的名称。

  10. 将测试项目的 app.config 文件复制到名为 app.teambuild.config 的文件中。

  11. 在 app.teambuild.config 文件中,自定义相对路径和连接字符串的设置,以使其具有要在 Team Foundation Build 下运行数据库单元测试时使用的值。

签入更新后的测试项目

签入更新后的生成定义

  • 重复在签入测试列表过程中执行的步骤,以签入对测试项目文件(.vbproj、.csproj)所做的更改。

运行新的生成类型

运行新的生成类型

  1. 在“生成”菜单上,单击“生成 {团队项目名称} 排队”[Queue Build {TeamProjectName}]。

    将出现“生成 {团队项目名称}”对话框,其中列出了现有的所有生成类型。

  2. 如有必要,请在“生成定义”中单击新的生成定义。

  3. 确认“生成定义”、“生成代理”和“该生成的放置文件夹”字段中的值均正确,然后单击“队列”。

    将显示“生成资源管理器”的“排队”选项卡。有关更多信息,请参见了解 Team Foundation Build 资源管理器

请参见

任务

如何:将测试组织为测试列表

如何:创建生成定义

如何:使用 Team Foundation Build 部署更改

如何:启动生成定义或对其进行排队

概念

Database Edition 术语概述