SQL Server 単体テストでは、Transact-SQL テスト スクリプトが実行され、結果が返されます。 場合によっては、結果が結果セットとして返されることがあります。 テスト条件を使用して結果を検証できます。 たとえば、テスト条件を使用して、特定の結果セットで返された行の数を確認したり、特定のテストの実行にかかった時間を確認したりできます。 テスト条件の詳細については、「 SQL Server 単体テストでのテスト条件の使用」を参照してください。
テスト条件を使用する代わりに、Transact-SQL アサーションを使用することもできます。アサーションは、Transact-SQL スクリプトで THROW または RAISERROR ステートメントです。 状況によっては、テスト条件の代わりに Transact-SQL アサーションを使用することをお選びになる場合があります。
Transact-SQL アサーションを使用する
Transact-SQL アサーションを使用するか、テスト条件を使用してデータを検証する前に、次の点を考慮する必要があります。
パフォーマンス。 最初にクライアント コンピューターにデータを移動してローカルで操作するよりも、サーバーで Transact-SQL アサーションを実行する方が高速です。
言語に関する知識。 現在の専門知識に基づいて、Transact-SQL のアサーション、C#、または Visual Basic のテスト条件を選択することができます。
複雑な検証。 場合によっては、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)]
Where:
- nnnnn は、予期されるメッセージの数です (例: 14025)
- x は、予期される例外の重大度です
- y は予期される例外の状態です
指定されていないパラメーターは無視されます。 これらのパラメーターは、データベース コードの RAISERROR ステートメントに渡します。 MatchFirstError = true を指定した場合、この属性は例外内の任意の SqlError と一致します。 既定の動作 (MatchFirstError = true) は、発生した最初のエラーにのみ一致します。
予期される例外と負の SQL Server 単体テストを使用する方法の例については、「 チュートリアル: SQL Server 単体テストを作成して実行する」を参照してください。
RAISERROR ステートメント
注
THROW ではなく RAISERROR を使用します。
RAISERROR は非推奨になりました。
Transact-SQL スクリプトの RAISERROR ステートメントを使用して、サーバーで Transact-SQL アサーションを直接使用できます。 構文は次のとおりです。
RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)
どこで:
-
@ErrorMessageは、ユーザー定義のエラー メッセージです。 このメッセージ文字列は、printf_s関数と同様に書式設定できます。 -
@ErrorSeverityは、0 から 18 のユーザー定義の重大度レベルです。
注
重大度レベルの値 '0' と '10' では、SQL Server の単体テストは失敗しません。 0 ~ 18 の範囲の他の値を使用して、テストを失敗させることができます。
@ErrorState は、1 から 127 の任意の整数です。 この整数を使用すると、コード内のさまざまな場所で発生する 1 つのエラーの発生を区別できます。
詳細については、 RAISERROR を参照してください。 SQL Server 単体テストで RAISERROR を使用する例については、「 方法: 単一トランザクションのスコープ内で実行される SQL Server 単体テストを記述する」を参照してください。