struts框架的工作流(使用tsqlt框架的)

编写单元测试来测试代码是编程中不可避免的做法。测试存储过程与其他代码一样重要。SP通常是手动测试的,我们避免添加自动化测试。在敏捷环境中,未经测试的代码在某些时候容易出现缺陷。在本文中,让我们了解一下tsqlt框架——一个用于SQL Server的开源数据库单元测试框架。

先决条件
  • 代码编辑器(例如 IntelIj)
  • SQL 数据库

将您的编辑器附加到正在运行的数据库。数据库可以在本地、云或任何虚拟机中运行。

struts框架的工作流(使用tsqlt框架的)(1)


创建测试对象

创建一个新的测试类,如下所示。在附加的 DB 会话中运行它会在 DB 中创建一个测试对象。我们将在此对象中添加所有测试脚本(SP)。

SQL1执行 tsqlt .NewTestClass 'EMPLOYEE'2去


注意新创建的对象内的测试。我们将在下面详细阅读测试。我们现在都准备好编写测试了。

struts框架的工作流(使用tsqlt框架的)(2)


表和 SP 详细信息

下面是我们将在本文中看到的示例的表格详细信息和 SP。

表名: 具有列 emp_no、emp_name 和薪水的员工。

struts框架的工作流(使用tsqlt框架的)(3)


存储过程 1: 从表中选择行。

CREATE PROCEDURE [dbo].[get_all_employees_v1]
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT emp_no
, emp_name
, salary
FROM dbo.employee c
END
GO

存储过程2:插入一条新记录。


CREATE PROCEDURE [dbo].[update_employees_v1]
@emp_no INT
,@emp_name VARCHAR(20)
,@salary INT

AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

INSERT INTO dbo.employee (emp_no, emp_name, salary)
VALUES (@emp_no, @emp_name, @salary)
END
GO


让我们看看如何为上述 SP 编写测试。

测试模式

我们为返回结果和更新记录的 SP 编写不同结构的测试。两者没有重大区别,但在填充预期表和实际表方面有一个简单的区别。

对于选择:
  1. 创建假表。
  2. 将测试数据插入表中。
  3. 创建预期和实际表。
  4. 运行 SP 并将结果放入“实际”表中。
  5. 比较“预期”和“实际”表。


CREATE OR ALTER PROCEDURE [EMPLOYEE].[test employee]
AS
BEGIN
-- ARRANGE (fake synonym table employee is created)
EXEC tSQLt.FakeSynonymTable 'employee', 'dbo';

-- Test data insertion
INSERT INTO dbo.employee (emp_no, emp_name, salary) VALUES (2, 'xxx', 1000);

-- Actual table is defined
SELECT emp_no, emp_name, salary INTO #actual FROM dbo.employee where 1 = 0

-- Create an empty #Expected temp table that has the same structure as the #Actual table
SELECT TOP (0) *
INTO #expected
FROM #actual;

-- Run the SP and store results in actual table
INSERT INTO #actual
EXEC dbo.get_all_employees_v1

-- Populate expected table with desired results
INSERT INTO #expected (emp_no, emp_name, salary) VALUES (2, 'xxx', 1000);

-- Assert expected and actual
EXEC tSQLt.AssertEqualsTable '#expected', '#actual', 'missing expected row'

END
GO

使用下面的代码运行测试并查看测试是否通过:

EXEC tSQLT.RUN 'EMPLOYEE.[test employee]'


struts框架的工作流(使用tsqlt框架的)(4)


插入或更新或删除:
  1. 创建假表。
  2. 将测试数据插入表中。
  3. 创建预期和实际表。
  4. 运行 SP。
  5. 将修改过的记录从原始表复制到实际。
  6. 比较“预期”和“实际”表。

CREATE OR ALTER PROCEDURE [EMPLOYEE].[test update_employee]
AS
BEGIN
-- ARRANGE (fake synonym table employee is created)
EXEC tSQLt.FakeSynonymTable 'employee', 'dbo';

-- Create expected tables
CREATE TABLE #expected (emp_no int, emp_name VARCHAR(20), salary int)

-- Run the SP
EXEC dbo.update_employees_v1 @emp_no=1, @emp_name='test', @salary=300

-- Above step had already create a new record in the table. Read it and store it in actual table
SELECT emp_no, emp_name, salary INTO #actual FROM dbo.employee WHERE emp_no=1

-- Populate expected table with desired results
INSERT INTO #expected (emp_no, emp_name, salary) VALUES (1, 'test', 300);

-- Assert expected and actual
EXEC tSQLt.AssertEqualsTable '#expected', '#actual', 'missing expected row'

END
GO


使用以下命令运行测试:

EXEC tSQLT.RUN 'EMPLOYEE.[test employee]'


struts框架的工作流(使用tsqlt框架的)(5)


结论

为任何一段代码编写测试对于防止错误很重要。SP也不例外。为 SP 编写自动化测试是非常早且高效地测试它们的好选择。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页