最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

关注

评论

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

基于 EventBridge 构建 SaaS 应用集成方案

阿里巴巴云原生

云原生 SaaS

如何在 Python 中反转字符串?

Ethereal

译文《Java并发编程之CAS》

潘大壮

乐观锁 并发编程 CAS 并发’ Java Concurrency

Docker Shim 被移除,K8s v1.24 升级该怎么办

Daocloud 道客

Docker Kubernetes CRI-Dockerd

天翼云供应链API安全治理实践获“优秀治理实践奖”

天翼云开发者社区

东数西算加快云网与数据融合天翼云架起云间高速

天翼云开发者社区

Web安全渗透测试基本流程

学神来啦

网络安全 Web 渗透测试 WEB安全 kali

详细解读PolarDB HTAP的功能特性和关键技术

阿里云数据库开源

数据库 阿里云 开源 postgre polarDB

《人民日报》刊文:天翼云持续创新为数据安全保驾护航

天翼云开发者社区

作业五

Geek_f3e842

架构实战营

拥抱国产云桌面,焱融科技与酷栈科技完成产品兼容认证

焱融科技

云计算 分布式 云原生 高性能 文件存储

向工程腐化开炮|资源治理

阿里巴巴终端技术

Java android 资源管理

阿里云神龙AI加速引擎帮助vivo将训练性能提升30%-70%

阿里云弹性计算

AI gpu 神龙架构 加速引擎

智能家居市场白热化,小程序助力生态合作新模式

Speedoooo

小程序生态 智慧小区 小程序容器 智慧家居 智慧物业

一种小程序弱网离线优化的思路

阿里巴巴终端技术

小程序 弱网 体验优化

阿里IM技术分享(七):闲鱼IM的在线、离线聊天数据同步机制优化实践

JackJiang

即时通讯 IM im开发

云原生网络利器--Cilium 之 eBPF 篇

Daocloud 道客

云原生 ebpf cilium

终端常用快捷键

刁架构

终端 快捷键 iterm2

技术平台&应用开发专题月 | 业务上云后的调试利器—云机一体

用友BIP

用友 用友iuap

每秒百万条信息查询天翼云助力江苏核酸检测信息查询

天翼云开发者社区

flask POST请求,数据入库,文件上传,一文看懂,3天掌握Flask开发项目系列博客之三

梦想橡皮擦

3月月更

WMS系统与ERP仓储管理的差异

源字节1号

开源 后端 前端开发 WMS系统 ERP系统

龙蜥开发者说来了,来看看社区一周动态还有什么? | 3.07-3.11

OpenAnolis小助手

开源 开发者 龙蜥社区 一周动态

天翼云联手平凯星辰共建开源分布式数据库实验室

天翼云开发者社区

确保数据中心物理安全的五种方法

Ethereal

iuap助力三花控股集团打造主数据管理平台

用友BIP

用友 用友iuap

在线JSON格式化美化

入门小站

工具

3天掌握Flask开发项目系列博客之二,操作数据库

梦想橡皮擦

3月月更

无影云电脑支持企业快速实现居家办公

阿里云弹性计算

远程办公 数据安全 无影云电脑

技术平台&应用开发专题月 | 企业上云利器-YMS(Yon Middleware Service)

用友BIP

用友 用友iuap

云原生中间件 -- Redis Operator 篇

Daocloud 道客

redis 云原生 中间件 云原生中间件

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