更新:2007 年 11 月
在本演练中,您将创建一个测试简单 Transact-SQL (T-SQL) 脚本的数据库单元测试。对于要测试的数据库,必须拥有或创建一个数据库项目,才能创建任何数据库单元测试。另外,该数据库必须包含数据,才能使测试返回有意义的结果。
在本演练的第一个过程中,将创建一个数据库项目并导入 Northwind 数据库的架构。在创建项目之后,可以创建用来为 Orders 表中的列生成数据的数据生成计划。然后,创建一个包含该测试的项目,编写该测试本身,并运行该测试以验证该脚本是否按预期方式工作。
先决条件
若要完成本演练,必须能够连接到装有 Northwind 数据库的数据库服务器。
创建数据库项目
- 在“文件”菜单上指向“新建”,再单击“项目”。 - 将出现“新建项目”对话框。 
- 在“项目类型”中,展开“数据库项目”节点,然后单击“Microsoft SQL Server”。 
- 在“模板”列表中,单击“SQL Server 2000 向导”。 
- 在“名称”中,键入 TestNorthwind。 
- 在“解决方案”列表中,单击“创建新解决方案”(如果该项尚未突出显示)。 
- 如果“创建解决方案的目录”复选框尚未选中,则选择该复选框。 
- 如果“添加到源代码管理”复选框尚未清除,则清除该复选框,并单击“确定”。 - 将出现“新建数据库项目向导”。接下来,您将使用该向导配置数据库项目并导入初始数据库架构。 
配置项目并导入数据库架构
- 阅读“欢迎”页之后,单击“下一步”。 
- 因为 Northwind 数据库只包含一个架构,所以单击“按对象类型组织我的项目”。 .gif) 重要说明: 重要说明:- 创建了项目后,将无法更改其组织方式。 
- 在“指定在数据库项目中创建的对象使用的默认架构”中,接受默认值 dbo。 
- 在“设置数据库选项”页上,接受默认设置,并单击“下一步”。 .gif) 说明: 说明:- 您可以在创建项目后更改这些选项。有关更多信息,请参见如何:为生成和部署配置数据库项目。 
- 在“导入数据库架构”页上,选中“导入现有架构”复选框。 
- 在“源数据库连接”中,单击对应于包含 Northwind 数据库的服务器和数据库的连接。如果该连接尚不存在,则单击“新建连接”来创建它。如果不指定连接,则将创建数据库项目但不导入任何架构。 .gif) 说明: 说明:- 如果数据库项目尚不包含数据库对象,则可在以后导入数据库架构。有关更多信息,请参见如何:导入数据库架构。 
- 接受默认的导入选项,然后单击“下一步”。 
- 在“配置生成/部署”页上的“目标连接”中,单击“浏览”按钮,并指定要用来创建独立开发环境的数据库服务器的连接。 - 若要创建新的数据库本地实例,请在“连接属性”对话框的“服务器名称”下面键入 (local),然后单击“使用 Windows 身份验证”。单击“确定”。 
- 在“目标数据库名称”中,键入 TestNorthwind(如果尚未指定)。 
- 在“部署排序规则默认值”中,单击“使用服务器的排序规则”。 - 此步骤将使目标数据库使用数据库项目的排序规则。 
- 清除“如果可能发生数据丢失则阻止增量部署”复选框。 - 由于独立开发环境将只包含生成的测试数据,因此可以允许数据丢失发生。 
- 单击“完成”创建数据库项目并导入数据库。 
检查产生的项目
- 在“解决方案资源管理器”中,展开 TestNorthwind 节点,然后展开“架构对象”子节点。 
- 浏览层次结构中“架构对象”节点下的子节点。 - “解决方案资源管理器”包含一些特定的文件,这些文件定义了被导入数据库的数据库架构中的对象。 
- 从“视图”菜单上,单击“其他窗口”并指向“架构视图”。 
- 在“架构视图”中,展开 TestNorthwind 节点。 
- 浏览层次结构中 TestNorthwind 节点下的子节点。 - “架构视图”包含“解决方案资源管理器”中显示的文件中定义的对象。 
- 在“解决方案资源管理器”中,单击 TestNorthwind 节点。 
- 在“项目”菜单上,单击“TestNorthwind 属性”。 
- 在“属性”页上,单击“生成”选项卡。 
- 在“目标数据库名称”中,键入 TestNorthwind。 
- 在“文件”菜单上,单击“保存选定项”。 
- 在“解决方案资源管理器”中单击 TestNorthwind 项目。 
- 在“生成”菜单中,单击“生成解决方案”。 
- 从“生成”菜单上,单击“部署 TestNorthwind”。 .gif) 说明: 说明:- 每个开发人员需指定将承载数据库副本的数据库服务器的连接字符串。 
接下来,您将指定一个数据生成计划,从而将实际测试数据填充到独立开发数据库中。
创建数据生成计划
- 在“解决方案资源管理器”中,展开 TestNorthwind 节点,然后单击“数据生成计划”文件夹。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 
- 在“模板”列表中单击“数据生成计划”。 
- 在“名称”中,键入 TestNW.dgen,然后单击“添加”。 - 一个名为 TestNW 的数据生成计划随即添加到数据库项目中,并在编辑器中打开。数据库架构也导入数据生成计划中。接下来,您将修改该计划,使其生成更加真实的测试数据。 
为 Orders 表定义数据生成计划
- 在数据生成计划中单击“dbo.Orders”。 
- 在“数据”菜单上,指向“数据生成器”,然后单击“列详细信息”。 - “列详细信息”窗口随即出现,其中显示 Orders 表的各个列、其数据类型、与每列关联的默认生成器,以及生成器结果。 
- 在“列详细信息”窗格中,单击 ShipCity,并将“生成器”字段设置为“数据绑定生成器”。 - 此步骤表明要使用查询结果来填充此列。 
- 在“视图”菜单上单击“属性窗口”。 
- 转至“属性”窗口中的“生成器”部分。在**“连接信息”**属性中,单击对应于在上一过程中从中导入数据库架构的数据库的连接。 - 此步骤指定在运行将为此列生成数据的查询时要使用的数据库连接。 
- 在“属性”窗口“生成器”部分中的**“查询”**属性内,将查询字符串设置为 SELECT * FROM Orders。 .gif) 说明: 说明:- 请勿更改种子值。为了从 Northwind 数据库中生成稍后将在本演练中使用的特定数据,此值是必需的。 
- 在“列详细信息”窗格中 ShipCity 的“生成器输出”字段中,单击“[OutputTable1].[ShipCity]”。 - 此步骤在结果集中选择要与此列关联的列。 
- 保存数据生成计划。 - 下一步将创建使用这些数据的数据库单元测试。 
创建数据库单元测试
创建数据库单元测试
- 在 Visual Studio 中,打开“测试”菜单,然后单击“新建测试”。 - 随即出现“添加新测试”对话框。 
- 单击“数据库单元测试”。 
- 在“测试名称”中,键入 SampleUnitTest。 
- 在“添加到测试项目”下,单击“创建新的 Visual C# 测试项目”,然后单击“确定”。 - 将出现“新建测试项目”对话框。 
- 保留新的测试项目的默认名称,然后单击“创建”。 - 新的测试项目随即添加到现有 TestNorthwind 解决方案中。该项目包含一个名为 SampleUnitTest.cs 的文件,此文件含有用于您的数据库单元测试的新测试类的代码。该测试类名为 SampleUnitTest,并且默认情况下包含一个名为 DatabaseTest1 的新的单元测试方法。您可以保留此测试方法的名称,也可以将其更改为更有意义的名称,并且可对其进行自定义以返回目标测试结果。有关更多信息,请参见如何:打开数据库单元测试以进行编辑。 - 将出现“项目‘TestProject’配置”对话框。 
- 在“数据库连接”下,选择第一个下拉列表中的 TestNorthwind 数据库。其名称以 <服务器名称>TestNorthwind.dbo 格式出现。如果出现此名称,则单击它,并转至步骤 9。 
- 如果 TestNorthwind 数据库未出现,则单击“新建连接”。 - 随即出现“连接属性”对话框。 
- 在“连接属性”对话框中,找到含有 TestNorthwind 数据库的服务器,并单击要使用的身份验证类型。在“选择或输入一个数据库名”下,键入 TestNorthwind,然后单击“确定”关闭“连接属性”对话框。 .gif) 说明: 说明:- 建立与数据库的连接之后,其名称将出现“项目‘TestProject’配置”对话框中的“数据库连接”下。 
- 在“项目‘TestProject’配置”对话框中,选中“使用辅助连接验证单元测试”复选框。 .gif) 说明: 说明:- 这样,您已为两个连接字符串指定了相同的值。大部分情况下,用于验证的连接字符串比用于执行的连接字符串权限更高。有关更多信息,请参见连接字符串和权限概述。 
- 选中“在单元测试运行前生成测试数据”复选框。 
- 在下拉列表中,单击 TestNW 数据生成计划,并单击“确定”。此数据生成计划将在运行单元测试时应用到 TestNorthwind 数据库。 .gif) 说明: 说明:- 还可以使用此对话框配置架构部署。有关更多信息,请参见如何:配置数据库单元测试执行。 - 当“项目‘TestProject’配置”对话框关闭时,您会看到“数据库单元测试设计器”。 - 对于您添加的每个测试条件,都将在源代码文件中创建相应的 C# 或 Visual Basic 代码。 
- 在“解决方案资源管理器”中右击测试项目并单击“生成”以生成测试项目。 
- 单击“数据库单元测试设计器”导航栏中的“添加测试”(+) 添加另一个单元测试。 - 将出现“为数据库测试指定一个名称”对话框。 
- 保留测试方法的默认名称,然后单击“确定”。此操作将向现有项目添加另一个单元测试。此单元测试是作为在先前创建的 SampleUnitTest 类内的新测试方法创建的。 - 现在您即可编写实际测试逻辑。 
编写数据库单元测试
- 在“数据库单元测试设计器”的导航栏中,单击 DatabaseTest1 并确保在相邻的下拉列表中选中“测试”。这将允许您为 DatabaseTest1 单元测试中的测试操作创建测试脚本。 
- 在 T-SQL 编辑器中添加以下 T-SQL 语句: - SELECT * from Orders where ShipCity = 'Seattle'
- 在“测试条件”窗格中,单击类型为“没有结论”的测试条件,并通过单击“删除测试条件”(x) 将其删除。 
- 通过在“测试条件”窗格中的列表中单击“行数”,再单击“添加测试条件”(+) 来添加行数测试条件。 
- 在“属性”窗口中,将“行数”属性设置为 1。 
- 从“文件”菜单中单击“全部保存”。 - 现在即可运行测试。 
运行数据库单元测试
- 在“测试”菜单上,指向“窗口”,然后单击“测试视图”。 - “测试视图”窗口将列出两个测试。在本演练的早期过程中,您创建了一个名为 DatabaseTest1 的测试,并向其中添加了多条 T-SQL 语句和一个测试条件。名为 DatabaseTest2 的测试是空的。 
- 右击“DatabaseTest1”,然后单击“运行选定内容”。 - Visual Studio Team System Database Edition 使用您指定的特权上下文连接到数据库并应用数据生成计划。Database Edition 随后会在运行该测试中的 T-SQL 脚本之前切换到执行上下文。然后,Database Edition 会根据测试条件中指定的内容计算 T-SQL 脚本的结果,并在“测试结果”窗口中显示结果(通过或失败)。 
- 在“测试结果”窗口中查看结果。 - 测试通过,这意味着运行 SELECT 语句将返回一行。 .gif) 说明: 说明:- 如果更改了数据生成计划中 [Orders][ShipCity] 的种子值,或者更改了要生成的行数,则此测试可能会失败。如果使用种子值 5 从 Northwind 生成了 50 行数据,则其中一个结果的 ShipCity 字段的值为 Seattle。 
后续步骤
在典型的项目中,将定义其他单元测试,以便验证所有的关键数据库对象是否正常工作。在完成这组测试之后,可以将这些测试签入版本控制中,以便与团队中的其他成员共享这些测试。
在建立了基线之后,可以创建和修改数据库对象,然后创建相关测试,以验证所做的更改是否将中断现有的行为。