写点什么

使用 tSQLt 进行 SQL Server 单元测试

  • 2012-02-13
  • 本文字数:1471 字

    阅读完需:约 5 分钟

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;
{1}

当执行这个测试案例的时候,结果会以文本形式显示(或者可以选择以 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 及更高版本兼容。

查看英文原文: SQL Server Unit Testing with tSQLt

2012-02-13 07:061687
用户头像

发布了 340 篇内容, 共 127.3 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

起风了,泛娱乐企业出海如何正确扬帆?

ToB行业头条

会是调用第三方接口那么简单吗?

高端章鱼哥

程序员 前端 接口 系统

人脸识别技术在智慧城市建设中的应用

来自四九城儿

为什么负数的补码等于反码加一

xzy

代码随想录训练营 Day02 - 数组(下)

jjn0703

算法

我为什么选择多边形架构做为工程的基础思想

软件工程师-罗小东

通过构建背景图学习CSS径向渐变

南城FE

CSS 前端开发 渐变

【汽车虚拟仿真】VR技术如何加速自动驾驶进程?

3DCAT实时渲染

虚拟仿真 云仿真 汽车虚拟仿真

List的拆分的几种方式

EquatorCoco

前端 前端框架 开发框架

Docker容器共享磁盘

高端章鱼哥

Docker Linux

九章云极DataCanvas公司加入中国移动信息现代产业链“十百千万”计划

九章云极DataCanvas

2023中国(抚远)冷水鱼预制菜高质量发展大会在黑龙江抚远举办

新消费日报

数智时代的守护者:低代码开发平台如何解决AI安全挑战?

快乐非自愿限量之名

AI 低代码 数智时代

保险业务连续性保障:从测试到生产,混沌平台建设节奏如何把控?

TakinTalks稳定性社区

让沉寂的数据“活”起来,用友BIP资产云提升港口企业决策效率

用友BIP

港口 资产云

一文吃透MAUI、WinUI3和WPF的优势及劣势

这我可不懂

WPF MAUI

重磅发布 | 博睿数据发布互联网行业精选案例集

博睿数据

互联网 可观测性 博睿数据 One 精选案例

人脸识别技术的分类和实现方法

来自四九城儿

人脸识别技术的未来发展方向

来自四九城儿

倒计时1天 | 诚邀见证“九章云极DataCanvas新产品发布会”!

九章云极DataCanvas

保姆级教程:带你体验华为云测试计划CodeArts TestPlan

华为云PaaS服务小智

云计算 开发者 软件开发 华为云

ChatGPT与码农的机会

这我可不懂

人工智能 ChatGPT

C++实现简单的ls命令以及原理

芯动大师

es 笔记二之基础查询

Hunter熊

elasticsearch

神级外挂 | 网络性能优化,2个补丁就足够

鼎道智联

HTML5 游戏开发实战 | 俄罗斯方块

TiAmo

html html5 6 月 优质更文活动

采用Qt+Live555搭建RTSP服务器

DS小龙哥

6 月 优质更文活动

我在中小型项目SuperCell模式实战经验

软件工程师-罗小东

鲲鹏入晋,乘云而起,华为开发者大会开启“山西时刻”,共话山西鲲鹏生态建设

彭飞

筑牢三大新型能源基础设施,能源变革的分水岭和路线图

脑极体

新能源

使用tSQLt进行SQL Server单元测试_软件工程_Jenni Konrad_InfoQ精选文章