首页
/
每日頭條
/
圖文
/
struts框架的工作流
struts框架的工作流
更新时间:2026-09-03 03:13:44

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

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
  詳細解讀《道德經》40      反動弱用   〈原文〉   反者道之動,弱者道之用。   天下萬物生于有,有生于無。   〈注釋〉   反:翻轉,反向,相反。   弱:柔弱。   〈譯文〉   向自己的反面運動,是道的運動特征;   依靠柔弱發揮作用,是道的應用特征。   天地萬物總稱為有,有生于無。   〈解讀〉   本章主要是闡述了道的運動特征和道...
2026-09-03
地下城堡2 雲之國攻略(地下城堡2史上最豪華福利活動)
地下城堡2 雲之國攻略(地下城堡2史上最豪華福利活動)
  經典的地牢探險與模拟經營手遊《地下城堡2》将于1月17日推出年度重制版。從遊戲畫面到人物角色都将全面換新,并且會有新的玩法内容更新。      圖1:年度重制版1月17日上線   随着本次更新,遊戲内也将開展各式各樣的福利活動,這在之前的版本中都是沒有的。單看禮包就囊括了登陸、充值等多種類型的禮包,讓人目不暇接。   回家的誘惑一:全服送SS英雄   本...
2026-09-03
周筆暢奔跑吧兄弟在第幾期(從極限男人幫到鄧超鹿晗)
周筆暢奔跑吧兄弟在第幾期(從極限男人幫到鄧超鹿晗)
  就算是在普通人的世界裡,真正的友情都非常難得,更何況是娛樂圈呢?   一腳踏入這個圈子的時候,就已經牽扯到各種各樣的利益關系了。   更何況如今娛樂圈裡也面臨着資源不夠分的情況,這也就意味着有些明星之間也是免不了要進行一番資源争奪。      所謂“既生瑜何生亮”,有争奪就會結下梁子,哪怕是之前關系再好的朋友,日後也極有可能會撕破臉皮。   話雖如此,難...
2026-09-03
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
  自古美人歎遲暮,不許英雄見白頭。遲暮真的是一件隻能悲傷無奈的事情嗎?   每個年齡都有每個年齡獨有的美,青絲有鮮活的朝氣美,華發有溫潤的歲月美,它們本就不分伯仲,一樣動人!      衰老是終究不可避免的事,然而現在我們在很多短視頻平台都能看到,一些妝容精緻、服飾考究的阿姨,展現出了這個年齡段獨有的氣質美。   那是閱盡千帆後,被生活打磨出的獨特韻味,雖...
2026-09-03
天津港現狀(天津港四變)
天津港現狀(天津港四變)
        在中國北方最大的綜合性港口天津港,來自美洲、歐洲、東南亞的貨物在此集結轉運,服務國内國際雙循環。夏德崧攝(中經視覺)   面朝渤海,心向遠洋。   2019年1月17日,在天津港考察時強調,“經濟要發展,國家要強大,交通特别是海運首先要強起來。要志在萬裡,努力打造世界一流的智慧港口、綠色港口,更好服務京津冀協同發展和共建‘一帶一路’”。   ...
2026-09-03
Copyright 2023-2026 - www.tftnews.com All Rights Reserved