央视网|中国网络电视台|网站地图
客服设为首页
登录

中国网络电视台 > 新闻台 > 新闻中心 >

使用tSQLt进行SQL Server单元测试

发布时间:2012年02月16日 16:56 | 进入复兴论坛 | 来源:中关村在线 | 手机看视频


评分
意见反馈 意见反馈 顶 踩 收藏 收藏
channelId 1 1 1

更多 今日话题

更多 24小时排行榜

  tSQLt是一种用于在SQL Server中进行单元测试的免费开源框架。开发者可以编写tSQLt测试案例,从而基于生产数据创建虚拟的表和视图,然后将期望值与实际的测试结果进行比较。测试是用T-SQL编写的,因此可以直接在SQL Server Management Studio中创建。

  使用tSQLt,开发者就能够拥有测试案例本身创建的数据,而不需要基于生产数据库的副本或者需要单独维护的测试数据库来测试。所有测试都在事务中执行,这有助于减少清理的工作。tSQLt测试可以逻辑分组到名为test classes的数据库schema中。

  安装这个框架很简单;下载了tsQLt之后,用户首先需要在数据库上启用CLR。

  EXEC sp_configure clr enabled, 1;

  RECONFIGURE;执行tSQLt文件夹中的Example.sql脚本会创建演示数据库。(想要把tSQLt安装到另一个数据库中,你需要运行ALTER DATABASE,并加上SET TRUSTWORTHY ON声明)。

  下一步是设置test class,其中会包含多个测试案例。这也只是创建新的schema:

  EXEC tSQLt.NewTestClass AcceleratorTests;

  GO这些工作完成之后,就可以创建测试案例了;以下是一个示例。所有测试案例的名称都需要以“test”开头,并遵循SQL Server存储过程的命名规则。这个示例创建了一个测试表,然后插入数据,并调用了函数GetStatusMessage。tSQLt函数AssertEquals会根据期望值检查实际的结果,如果匹配的话,测试就通过了。

  CREATE PROCEDURE [AcceleratorTests].[test status message includes the number of particles]

  AS

  BEGIN

  Assemble: Fake the Particle table to make sure it is empty and that constraints will not be a problem

  EXEC tSQLt.FakeTable Accelerator.Particle;

  Put 3 test particles into the table

  INSERT INTO Accelerator.Particle (Id) VALUES (1);

  INSERT INTO Accelerator.Particle (Id) VALUES (2);

  INSERT INTO Accelerator.Particle (Id) VALUES (3);

  Act: Call the GetStatusMessageFunction

  DECLARE @StatusMessage NVARCHAR(MAX);

  SELECT @StatusMessage = Accelerator.GetStatusMessage();

  Assert: Make sure the status message is correct

  EXEC tSQLt.AssertEqualsString The Accelerator is prepared with 3 particles., @StatusMessage;

  END;当执行这个测试案例的时候,结果会以文本形式显示(或者可以选择以XML格式输出):

  ++

  |Test Execution Summary|

  ++

  |No|Test Case Name

  |Result

  ++++

  |1|[AcceleratorTests].[test status message includes the number of particles]|Success|

  Msg 50000, Level 16, State 10, Line 1

  Test Case Summary: 1 test case(s) executed, 1 succeeded, 0 failed, 0 errored.

  一旦在测试类中创建了大量测试案例,我们就可以使用EXEC tSQLt.RunAll来批量运行。想要获得更多开始使用tSQLt的信息,你可以访问tSQLt教程。

  如果你想要把SQL单元测试作为持续构建过程的一部分,那么可以把tSQLt与Cruise Control集成。正如之前在InfoQ中曾经报道过的,有一个针对tSQLt的可视化界面叫做SQL Test。tSQLt与SQL Server 2005 SP2及更高版本兼容。

  声明:

  凡注明为其他媒体来源的信息,均为转载自其他媒体,转载并不代表本网赞同其观点,也不代表本网对其真实性负责。您若对该稿件内容有任何疑问或质疑,请即与新民网联系,本网将迅速给您回应并做处理。

热词:

  • tSQLt
  • test
  • Server
  • 单元测试
  • InfoQ
  • T-SQL
  • INSERT
  • 测试结果
  • EXEC
  • Particle
  • CCTV.com - ERROR

    瀵逛笉璧凤紝鍙兘鏄綉缁滃師鍥犳垨鏃犳椤甸潰锛岃绋嶅悗灏濊瘯銆