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

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

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

  • 安装 Team Foundation Build 和 Team Foundation 版本控制。 可能需要将 Team Foundation Build和 Team Foundation 版本控制安装到不同的计算机上。

  • 连接到 Visual Studio Team Foundation Server 的实例。 有关如何连接到 Team Foundation Server 的信息,请参见How to: Connect to a Team Project in Team Foundation Server

配置完工作环境后,必须在 Visual Studio 高级专业版或 Visual Studio 旗舰版中按照以下步骤操作: 

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

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

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

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

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

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

  1. 配置测试设置以在 x64 生成代理上运行数据库单元测试

  2. 为测试类别分配测试(可选)

  3. 修改测试项目

  4. 签入解决方案

  5. 创建生成定义

  6. 运行新的生成定义

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

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

若要解决这些问题,必须在您的 app.config 中指定一个重写部分,即用特定于 Team Foundation Build 环境的配置文件重写 app.config。 有关更多信息,请参见本主题后面的修改测试项目。

配置测试设置以在 x64 生成代理上运行数据库单元测试

您必须先配置测试设置来更改宿主进程平台,然后才能在 x64 生成代理上运行数据库单元测试。

指定宿主进程平台

  1. 打开包含要配置其设置的测试项目的解决方案。

  2. 在**“解决方案资源管理器”“解决方案项”文件夹中,双击“Local.testsettings”** 文件。

    随即出现**“测试设置”**对话框。

  3. 在列表中单击**“宿主”**。

  4. 在详细信息窗格的**“宿主进程平台”中,单击“MSIL”**以将您的测试配置为在 x64 生成代理上运行。

  5. 单击**“应用”**。

为测试类别分配测试(可选)

通常,当您创建一个生成定义以运行单元测试时,会指定一个或多个测试类别。 运行生成时,将运行指定类别中的所有测试。

为测试类别分配测试

  1. 打开**“测试视图”**窗口。

  2. 选择一个测试。

  3. 在属性窗格中,单击**“测试类别”**,然后单击最右侧列中的省略号 (…)。

  4. 在**“测试类别”窗口的“添加新的类别”**框中,键入新测试类别的名称。

  5. 单击**“添加”,然后单击“确定”**。

    新的测试类别将分配给您的测试,而且可由其他测试通过它们的属性使用。

修改测试项目

默认情况下,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. 在**“解决方案资源管理器”中,右击 app.config 文件,然后单击“复制”**。

  2. 右击测试项目,再单击**“粘贴”**。

  3. 右击名为**“app.config 副本”**的文件,再单击“重命名”。

  4. 键入 BuildComputer.dbunitttest.config,再按 Enter,其中 BuildComputer 是运行生成代理的计算机的名称。

  5. 双击 BuildComputer.dbunitttesting.config。

    配置文件将在编辑器中打开。

  6. 通过为源文件夹以及与解决方案同名的子文件夹添加文件夹级别,可更改 .dbproj 和 .dgen 文件的相对路径。 例如,如果配置文件最初包含以下项:

    <DatabaseDeployment DatabaseProjectFileName="..\..\..\SalesDB\SalesDB.DBProj" Configuration="Debug" />
    

    按如下方式更新文件:

    <DatabaseDeployment DatabaseProjectFileName="..\..\..\Sources\SalesDB\SalesDB.DBProj" Configuration="Debug" />
    

    针对数据生成文件(如果指定了一个)重复此过程。

    完成后,您的 BuildComputer.dbunitttest.config 文件应类似于以下示例:

    <DatabaseUnitTesting>
            <DatabaseDeployment DatabaseProjectFileName="..\..\..\Sources\UnitTest\UnitTest\UnitTest.dbproj"
                Configuration="Debug" />
            <DataGeneration ClearDatabase="true" />
            <ExecutionContext Provider="System.Data.SqlClient" ConnectionString="Data Source=.\SQLEXPRESS;Initial Catalog=UnitTestB;Integrated Security=True;Pooling=False"
                CommandTimeout="30" />
            <PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="Data Source=.\SQLEXPRESS;Initial Catalog=UnitTestB;Integrated Security=True;Pooling=False"
                CommandTimeout="30" />
    </DatabaseUnitTesting>
    
  7. 更新 ExecutionContext 和 PrivilegedContext 的 ConnectionString 特性,以指定与您要部署到的目标数据库的连接。

  8. 在**“文件”菜单上,单击“全部保存”**。

  9. 在“解决方案资源管理器”中双击 app.config。

  10. 在编辑器中,更新 <DatabaseUnitTesting> 节点以匹配以下内容:

    <DatabaseUnitTesting AllowConfigurationOverride="true">
    

    进行这种更改后,Team Foundation Build 即可使用您所创建的替换配置文件。

  11. 在**“文件”菜单上,单击“全部保存”**。

    接下来,您必须更新 Local.testsettings 才能包括自定义的配置文件。

自定义 Local.testsettings 以部署自定义配置文件

  1. 在解决方案资源管理器中,双击 Local.testsettings。

    随即出现**“测试设置”**对话框。

  2. 在类别列表中,单击**“部署”**。

  3. 选中**“启用部署”**复选框。

  4. 单击**“添加文件”**。

  5. 在**“添加部署文件”**对话框中,指定您所创建的 BuildComputer.dbunitttest.config 文件。

  6. 单击**“应用”**。

  7. 单击**“关闭”**。

  8. 在**“文件”菜单上,单击“全部保存”**。

    接下来,将您的解决方案签入版本控制。

签入解决方案

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

提示

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

签入解决方案

  1. 连接到运行 Team Foundation Server 的计算机。

    有关更多信息,请参见使用源代码管理资源管理器

  2. 如果解决方案尚不在源代码管理中,请将其添加到源代码管理中。

    有关更多信息,请参见向版本控制中添加文件

  3. 单击**“视图”,然后单击“挂起的签入”**。

  4. 签入解决方案的所有文件。

    有关更多信息,请参见签入挂起的更改

    提示

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

    在**“解决方案资源管理器”**中,每个文件的旁边将出现一个锁形图标,指示该文件已签入。 有关更多信息,请参见查看版本控制文件和文件夹的属性

    您的测试可供 Team Foundation Build 使用。 您现在可以创建包含要运行的测试的生成定义。

创建生成定义

创建生成定义

  1. 在团队资源管理器中,单击团队项目,右击**“生成”节点,然后单击“新建生成定义”**。

    此时将出现**“新建生成定义”**窗口。

  2. 在**“生成定义名称”**中,键入要用于生成定义的名称。

  3. 在导航栏中单击**“生成默认值”**。

  4. 在**“将生成输出复制到以下放置文件夹(UNC 路径,如 \\server\share)”**中,指定包含生成输出的文件夹。

    可以在本地计算机上或生成进程将具有权限的任何网络位置上指定共享文件夹。

  5. 在导航栏中单击**“进程”**。

  6. 在**“必需”组的“要生成的项”**中,单击浏览按钮 (...)。

  7. 在**“生成项目列表编辑器”对话框中单击“添加”**。

  8. 指定在本演练前面部分中添加到版本控制中的解决方案文件 (.sln),然后单击**“确定”**。

    解决方案随即出现在**“要生成的项目或解决方案文件”**列表中。

  9. 单击**“确定”**。

  10. 在**“基本”组的“自动测试”**中,指定您要运行的测试。 默认情况下,将运行包含在您的解决方案中名为 *test*.dll 的文件中的测试。

  11. 在**“文件”菜单上,单击“保存项目名称”**。

    现在已经创建了一个生成定义。 接下来,您将修改测试项目。

运行新的生成定义

运行新的生成类型

  1. 在团队资源管理器中,展开团队项目节点,再展开“生成”节点,右击要运行的生成定义,然后单击“使新生成入队”。

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

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

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

    将显示**“生成资源管理器”“排队”**选项卡。 有关更多信息,请参见管理和查看已完成的生成

请参见

任务

创建基本生成定义

将生成排入队列

监视正在运行的生成的进度