央視網|中國網絡電視臺|網站地圖
客服設為首頁
登錄

中國網絡電視臺 > 新聞臺 > 新聞中心 >

使用tSQLt進行SQL Server單元測試

發佈時間:2012年02月16日 16:56 | 進入復興論壇 | 來源:中關村在線 | 手機看視頻


評分
意見反饋 意見反饋 頂 踩 收藏 收藏
channelId 1 1 1
壟!-- /8962/web_cntv/dicengye_huazhonghua01 -->

更多 今日話題

壟!-- /8962/web_cntv/dicengye_huazhonghua02 -->

更多 24小時排行榜

壟!-- /8962/web_cntv/dicengye_huazhonghua03 -->

  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;當執行這個測試案例的時候,結果會以文本形式顯示(或者可以選擇以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及更高版本兼容。

  聲明:

  凡註明為其他媒體來源的信息,均為轉載自其他媒體,轉載並不代表本網贊同其觀點,也不代表本網對其真實性負責。您若對該稿件內容有任何疑問或質疑,請即與新民網聯絡,本網將迅速給您回應並做處理。

熱詞:

  • tSQLt
  • test
  • Server
  • 單元測試
  • InfoQ
  • T-SQL
  • INSERT
  • 測試結果
  • EXEC
  • Particle