【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

使用 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:061655
用户头像

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

关注

评论

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

wxPython界面设计初体验-值得学习的 Python GUI 库 (2)

迷彩

GUI 7月月更 WxPython

PPT制作

逝缘~

PPT 7月月更

深入理解Linux 进程管理之CFS负载均衡

C++后台开发

Linux 负载均衡 C++后台开发 进程管理 C++开发

Java基础:IO流最全汇总

百思不得小赵

io Java’ 7月月更

【玩转 RT-Thread】I2C 内核

攻城狮杰森

I2C协议 7月月更 RT-Thread

TCP拥塞控制详解 | 4. 控制算法

俞凡

算法 网络 TCP拥塞控制

机器学习-异常检测

AIWeker

机器学习 异常检测 7月月更

微信小程序骨架屏的应用与实现步骤

猪痞恶霸

微信小程序 前端 7月月更

GitHub标星1w+超牛的微服务项目,开发脚手架

冉然学Java

Java 编程 程序员 面试 Spring Cloud

PoS机制随机性解读,波卡的随机性原理如何运作?

One Block Community

重新签名 iOS 51启蒙英语 App

贾献华

7月月更

什么时候会触发fullGC

技术小生

JVM GC 7月月更

《看完就懂系列》项目中的权限管理复杂吗?

南极一块修炼千年的大冰块

7月月更

【刷题记录】5. 最长回文子串

WangNing

7月月更

能源数字化:云厂商的角逐与竞争焦点

脑极体

彻底清除本地的MySQL数据库

Java学术趴

7月月更

Qt|实现边加载数据边显示页面

中国好公民st

qt 7月月更

面试官灵魂暴击:如何保障消息100%投递成功及保证消息的幂等性?

冉然学Java

Java后端 #技术干货#

ThreeJS 动画之 Noisy Lines

南城FE

CSS 前端 动画 7月月更

Substrate 技术及生态6月大事记 | Polkadot Decoded 圆满落幕,黑客松获胜项目为生态注入新生力量

One Block Community

【C语言】进阶指针Two

謓泽

7月月更

Java 技术栈中间件优雅停机方案设计与实现全景图

bin的技术小屋

dubbo 优雅停机 netty SpringFramework Graceful Shutdown

DFINITY 整合技术解读——阈值ECDSA 实现 IC 与比特币、以太坊整合

TinTinLand

去中心化的底层是共识——Polkadot 混合共识机制解读

One Block Community

跨域问题之Spring的跨域的方案

急需上岸的小谢

7月月更

Cgroup memory子系统

总想做点什么

小程序页面介绍

小恺

7月月更

Arbitrum 推出 AnyTrust 链,满足生态项目多元需求

TinTinLand

第三届中国工业互联网大赛在杭州闭幕 第四届大赛即日启动

科技热闻

新星计划Day2【JavaSE】 枚举类与注解

京与旧铺

7月月更

携手共建安全生态|海泰方圆正式加入申威产业发展联盟

电子信息发烧客

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