次の方法で共有


データベース単体テストでの Transact-SQL アサーションの使用

データベース単体テストでは、Transact-SQL テスト スクリプトが実行され、結果が返されます。 結果は、結果セットとして返される場合もあります。テスト条件を使って結果を検証できます。 たとえば、テスト条件を使用すると、結果セットで返された行数を調べたり、テストの実行にかかった時間を調べたりできます。 テスト条件の詳細については、「データベース単体テストでのテスト条件の使用」を参照してください。

テスト条件を使用する代わりに、Transact-SQL アサーション (Transact-SQL スクリプトの RAISERROR ステートメント) を使用することもできます。 状況によっては、テスト条件の代わりに Transact-SQL アサーションを使用した方がよい場合があります。

Transact-SQL アサーションの使用

データの検証に Transact-SQL アサーションとテスト条件のどちらを使用するかを決めるときは、次の点を考慮してください。

  • パフォーマンス。 サーバーで Transact-SQL アサーションを実行すると、クライアント コンピューターにデータを移動してローカルで操作する場合よりも処理が高速です。

  • 使い慣れた言語。 どの言語を現在使い慣れているかに応じて、Transact-SQL アサーションか C# または Visual Basic のテスト条件を選択できます。

  • 複雑な検証。 場合によっては、より複雑なテスト検証を C# または Visual Basic でビルドし、クライアントでテストを検証できます。

  • レガシ検証ライブラリ。 検証を実行するコードが既にある場合は、テスト条件の代わりに既存のコードをデータベース単体テストで使用できます。

予期される例外が指定された単体テスト メソッドのマーク

予期される例外が指定されたデータベース単体テスト メソッドをマークするには、次の属性を追加します。

<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) は、最初に発生するエラーにしか一致しません。

予期される例外および否定的なデータベース単体テストの使用方法の例については、「チュートリアル : データベース単体テストの作成と実行」を参照してください。

RAISERROR ステートメント

Transact-SQL スクリプトで RAISERROR ステートメントを使用すると、サーバーで Transact-SQL アサーションを直接使用できます。 構文は次のとおりです。

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

それぞれの文字について以下に説明します。

@ErrorMessage は、ユーザー定義のエラー メッセージです。 このメッセージ文字列は、printf_s 関数に似た形式で書式指定できます。

@ErrorSeverity は、ユーザー定義の重大度レベル (0 ~ 18) です。

注意

重大度レベルの値が '0' および '10' の場合、データベース単体テストは失敗しません。 0 ~ 18 の範囲で別の値を使用すると、テストが失敗します。

@ErrorState は 1 ~ 127 の任意の整数です。 この整数を使用して、コード内の異なる場所で発生した同じエラーの複数の出現を区別できます。

詳細については、Microsoft Web サイトの SQL Server Books Online の「RAISERROR (Transact-SQL)」を参照してください。 データベース単体テストでの RAISERROR の使用例については、「方法 : 単一のトランザクションのスコープ内で実行されるデータベース単体テストを作成する」を参照してください。

参照

処理手順

方法 : 編集するデータベース単体テストを開く

概念

データベース単体テストでのテスト条件の使用

単体テストを使用したデータベース コードの検証