SQL Server 単体テストでは、1 つ以上の Transact-SQL テスト スクリプトが実行されます。 結果は、Transact-SQL スクリプト内で評価し、エラーを返してテストに失敗するために使用する THROW または RAISERROR したり、テストでテスト条件を定義して結果を評価したりできます。 このテストは 、SqlExecutionResult クラスのインスタンスを返します。 このクラスのインスタンスには、1 つ以上の DataSet、実行時間、スクリプトの影響を受ける行が含まれています。 この情報はすべて、スクリプトの実行中に収集されます。 これらの結果は、テスト条件を使用して評価できます。 SQL Server Data Tools には、一連の定義済みのテスト条件が用意されています。 カスタム条件を作成して使用することもできます。 「SQL Server 単体テストのカスタム テスト条件」を参照してください。
定義済みのテスト条件
次の表に、SQL Server 単体テスト デザイナーの [テスト条件] ペインを使用して追加できる定義済みのテスト条件を示します。
| テスト条件 | テスト条件の説明 |
|---|---|
| データ チェックサム | Transact-SQL スクリプトから返された結果セットのチェックサムが予想されるチェックサムと一致しない場合、失敗します。 詳細については、「 データ チェックサムの指定」を参照してください。 手記: テストの実行ごとに異なるデータを返す場合、このテスト条件は推奨されません。 たとえば、結果セットに生成された日付または時刻が含まれている場合、または ID 列が含まれている場合、実行ごとにチェックサムが異なるため、テストは失敗します。 |
| 空のリザルトセット | Transact-SQL スクリプトから返された結果セットが空でない場合は失敗します。 |
| 実行時間 | Transact-SQL テスト スクリプトの実行に予想以上の時間がかかる場合は失敗します。 既定の実行時間は 30 秒です。 実行時間はテスト スクリプト テストにのみ適用され、事前テスト スクリプトやテスト後スクリプトには適用されません。 |
| 予期されるスキーマ | 結果セットの列とデータ型がテスト条件に指定された列と一致しない場合は失敗します。 テスト条件のプロパティを使用してスキーマを指定する必要があります。 詳細については、「 予期されるスキーマの指定」を参照してください。 |
| 結果不確定 | 常に不確定の結果を含むテストを生成します。 これは、すべてのテストに追加される既定の条件です。 このテスト条件は、テスト検証が実装されていないことを示すために含まれています。 他のテスト条件を追加した後、テストからこのテスト条件を削除します。 |
| 空ではない結果セット | 結果セットが空の場合は失敗します。 このテスト条件または EmptyResultSet をテスト スクリプトの Transact-SQL @@RAISERROR 関数と共に使用して、更新が正しく機能したかどうかをテストできます。 たとえば、更新前の値を保存し、更新プログラムを実行し、更新後の値を比較し、予想される結果が得られない場合はエラーを発生させることができます。 |
| 行数 | 結果セットに予想される行数が含まれていない場合は失敗します。 |
| スカラー値 | 結果セット内の特定の値が指定した値と等しくない場合は失敗します。 既定値は null です。 |
実行時間テスト条件は、Transact-SQL テスト スクリプトを実行する必要がある時間制限を指定します。 この制限時間を超えると、テストは失敗します。 テスト結果には、実行時間テスト条件とは異なる Duration 統計も含まれます。 Duration 統計には、実行時間だけでなく、データベースに 2 回接続する時間も含まれます。事前テスト スクリプトや事後テスト スクリプトなど、他のテスト スクリプトを実行する時間。とテスト条件を実行する時間。 そのため、テストの実行時間が実行時間より長い場合でも、テストに合格できます。
レポートされた期間には、テストが実行される前に発生するため、データの生成とスキーマのデプロイに使用される時間は含まれません。 テスト期間を表示するには、[テスト 結果 ] ウィンドウでテストの実行を選択し、右クリックして [ テスト結果の詳細の表示] を選択します。
SQL Server 単体テスト デザイナーの [テスト条件] ウィンドウを使用して、SQL Server 単体テストにテスト条件を追加できます。 詳細については、「 方法: SQL Server 単体テストにテスト条件を追加する」を参照してください。
テスト メソッド コードを直接編集して、さらに機能を追加することもできます。 詳細については、「 方法: 編集する SQL Server 単体テストを開く 」および「 方法: 単一トランザクションのスコープ内で実行される SQL Server 単体テストを記述する」を参照してください。 たとえば、Assert ステートメントを追加することで、テスト メソッドに機能を追加できます。 詳細については、「 SQL Server 単体テストで Transact-SQL アサーションを使用する」を参照してください。
予期されるエラー
SQL Server の単体テストを作成して、成功しない動作をテストできます。 このような予期されるエラーは、否定テストと呼ばれることもあります。 次のような例があります。
- 無効な顧客 ID を指定した場合、顧客のデータを削除するストアド プロシージャが失敗することを確認します。
- 注文が行われなかった場合、または注文が既に満たされている場合、注文を満たすストアド プロシージャが失敗することを確認します。
- 注文を取り消すストアド プロシージャで、完了した注文または既に取り消された注文を取り消できないことを確認します。
予期される例外をスローするストアド プロシージャの SQL Server 単体テストを定義できます。 属性を単体テスト メソッドに追加して、必要な例外または例外を示すことができます。 これにより、例外が発生したときにテストが失敗するのを防ぐことができます。
SQL Server 単体テスト メソッドに予期される例外をマークするには、次の属性を追加します。
[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]
Where:
- nnnnn は、予期されるメッセージの数です (例: 14025)
- x は、予期される例外の重大度です
- y は予期される例外の状態です
指定されていないパラメーターは無視されます。 これらのパラメーターは、データベース コードの THROW ステートメントに渡します。 MatchFirstError = false を指定した場合、この属性は例外内のいずれかの SqlError と一致します。 既定の動作 (MatchFirstError = true) は、発生した最初のエラーにのみ一致します。
予期される例外と負の SQL Server 単体テストを使用する方法の例については、「 チュートリアル: SQL Server 単体テストを作成して実行する」を参照してください。
データ チェックサムを指定する
SQL Server 単体テスト デザイナーを表示するには、 ソリューション エクスプローラーで単体テストのソース コード ファイルをダブルクリックします。
データベースの単体テストにデータ チェックサム テスト条件を追加した後、次の手順を使用して、予想されるチェックサムを構成する必要があります。
必要なチェックサムを指定する
テスト条件の一覧で、チェックサムを指定するデータ チェックサムテスト条件を選択します。
F4 キーを押して [プロパティ] ウィンドウを開きます。 [ 表示 ] メニューを開き、[ プロパティ ウィンドウ] を選択することもできます。
(省略可能)テスト条件の (Name) プロパティをよりわかりやすいものに変更できます。
「構成」 プロパティで、ブラウズ ボタン (...) を選択します。
[ TestConditionName の構成 ] ダイアログ ボックスが表示されます。
テストするデータベースへの接続を指定します。 詳細については、「 方法: データベース接続を作成する」を参照してください。
既定では、テストの Transact-SQL 本文が編集ウィンドウに表示されます。 必要に応じてコードを変更して、期待される結果を生成できます。 たとえば、テストの事前準備段階にコードが含まれている場合、そのコードを追加する必要があるかもしれません。
Important
以前にチェックサムを指定したチェックサム条件を変更した場合、編集ウィンドウで行った変更は保存されません。 [取得] を選択する前に、これらの変更をもう一度行う必要があります。
[ 取得] を選択します。
Transact-SQL は、指定されたデータベース接続に対して実行され、結果がダイアログ ボックスに表示されます。
結果がテストの予想される結果と一致する場合は、[ OK] を選択します。 それ以外の場合は、Transact-SQL 本文を変更し、結果が期待どおりになるまで手順 6、7、8 を繰り返します。
テスト条件の [値] 列には、予想されるチェックサムの値が表示されます。
必要なスキーマを指定する
予期されるスキーマ テスト条件を SQL Server の単体テストに追加した後、次の手順を使用して、予期されるスキーマを構成する必要があります。
必要なスキーマを指定する
テスト条件の一覧で、スキーマを指定する必要があるスキーマテスト条件を選択します。
F4 キーを押して [プロパティ] ウィンドウを開きます。 [ 表示 ] メニューを開き、[ プロパティ ] ウィンドウを選択することもできます。
(省略可能)テスト条件の (Name) プロパティをよりわかりやすいものに変更できます。
「構成」 プロパティで、ブラウズ ボタン (...) を選択します。
[ TestConditionName の構成 ] ダイアログ ボックスが表示されます。
テストするデータベースへの接続を指定します。 詳細については、「 方法: データベース接続を作成する」を参照してください。
既定では、テストの Transact-SQL 本文が編集ウィンドウに表示されます。 必要に応じてコードを変更して、期待される結果を生成できます。 たとえば、テストの事前準備段階にコードが含まれている場合、そのコードを追加する必要があるかもしれません。
Important
以前にスキーマを指定したスキーマ条件を変更した場合、編集ウィンドウで行った変更は保存されません。 [取得] を選択する前に、これらの変更をもう一度行う必要があります。
[ 取得] を選択します。
Transact-SQL は、指定されたデータベース接続に対して実行され、結果がダイアログ ボックスに表示されます。 結果セットのスキーマ (図形) を検証しており、結果の値を確認していないため、列が期待どおりに表示されている限り、返される結果にデータを表示する必要はありません。
結果がテストの予想される結果と一致する場合は、[ OK] を選択します。 それ以外の場合は、Transact-SQL 本文を変更し、結果が期待どおりになるまで手順 6、7、8 を繰り返します。
テスト条件の [値] 列には、予想されるスキーマに関する情報が表示されます。 たとえば、「予想される: テーブルが2つ」と表示されることがあります。
拡張可能なテスト条件
定義済みの 6 つのテスト条件に加えて、独自の新しいテスト条件を記述できます。 これらのテスト条件は、SQL Server 単体テスト デザイナーの [テスト条件] ウィンドウに表示されます。 詳細については、「 SQL Server 単体テストのカスタム テスト条件」を参照してください。