共用方式為


在 SQL Server 單元測試中使用 Transact-SQL 判斷提示

 

在 SQL Server 單元測試中,Transact-SQL 測試指令碼會執行並傳回結果。有時候,結果會當做結果集傳回來。您可以使用測試條件來驗證結果。例如,您可以使用測試條件來檢查特定結果集傳回的資料列數目或驗證執行特定測試所花費的時間長度。如需測試條件的詳細資訊,請參閱在 SQL Server 單元測試中使用測試條件

如果不使用測試條件,您也可以使用 Transact-SQL 判斷提示,亦即 Transact-SQL 指令碼中的 THROW 或 RAISERROR 陳述式。在某些情況下,您可能會想要使用 Transact-SQL 判斷提示而非測試條件。

使用 Transact-SQL 判斷提示

在您決定要使用 Transact-SQL 判斷提示或測試條件來驗證資料之前,應該先考慮下列各點。

  • 效能:在伺服器上執行 Transact-SQL 判斷提示的速度會比先將資料移至用戶端電腦,然後在本機上操作資料要快。

  • 對語言的熟悉程度:您可能會根據目前的專業知識而偏好特定語言,因此選擇 Transact-SQL 判斷提示或 Visual C# 或 Visual Basic 測試條件。

  • 複雜的驗證:在某些情況下,您可以在 Visual C# 或 Visual Basic 中建置更複雜的測試,並且在用戶端上驗證測試。

  • 簡單:使用預先定義的測試條件比在 Transact-SQL 中撰寫對等的指令碼通常更簡單。

  • 舊版驗證程式庫:如果您已經擁有執行驗證的程式碼,就可以將它用於 SQL Server 單元測試,而非使用測試條件。

使用預期的例外狀況來標示單元測試方法

若要使用預期的例外狀況來標示 SQL Server 單元測試方法,請加入下列屬性:

<ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)> _
[ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)]

其中:

  • nnnnn 是預期的訊息編號,例如 14025

  • x 是預期的例外狀況嚴重性

  • y 是預期的例外狀況狀態

任何未指定的參數都會被忽略。您可以將這些參數傳遞至資料庫程式碼中的 RAISERROR 陳述式。如果指定 MatchFirstError = true,此屬性會符合例外狀況中的任何 SqlErrors。預設行為 (MatchFirstError = true) 是只符合第一個發生的錯誤。

如需如何使用預期的例外狀況和負面 SQL Server 單元測試的範例,請參閱逐步解說:建立和執行 SQL Server 單元測試

RAISERROR 陳述式

System_CAPS_note注意事項

使用 THROW,而不是 RAISERROR。RAISERROR 現在已被取代。

您可以在 Transact-SQL 指令碼中使用 RAISERROR 陳述式,藉以直接在伺服器上使用 Transact-SQL 判斷提示。其語法如下:

**RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)**

其中:

@ErrorMessage 是任何使用者定義的錯誤訊息。您可以格式化此訊息字串 (與 printf_s 函式很相似)。

@ErrorSeverity 是使用者定義的嚴重性層級 (範圍從 0 到 18)。

System_CAPS_note注意事項

嚴重性層級的 '0' 和 '10' 值不會導致 SQL Server 單元測試失敗。您可以使用範圍 0 - 18 中的任何其他值來導致測試失敗。

@ErrorState 是 1 - 127 之間的任意整數。您可以使用此整數來區別在程式碼中不同位置引發之單一錯誤的出現項目。

如需詳細資訊,請參閱 RAISERROR (Transact-SQL)。SQL Server主題提供了在 HOW TO:撰寫在單一交易範圍內執行的 SQL Server 單元測試 單元測試中使用 RAISERROR 的範例。

請參閱

建立和定義 SQL Server 單元測試
在 SQL Server 單元測試中使用測試條件
使用 SQL Server 單元測試驗證資料庫程式碼
HOW TO:開啟要編輯的 SQL Server 單元測試