tft每日頭條

 > 圖文

 > struts框架的工作流

struts框架的工作流

圖文 更新时间:2024-12-01 05:36:18

編寫單元測試來測試代碼是編程中不可避免的做法。測試存儲過程與其他代碼一樣重要。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 編寫自動化測試是非常早且高效地測試它們的好選擇。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved