データベース単体テストの概要
データベース単体テストを使用すると、データベースのベースラインとなる状態を設定した後、データベース オブジェクトに対してそれ以降行う変更を検証できます。最初の手順は、特定のデータベース オブジェクトを実行し、データベース オブジェクトが正しく機能するか検証する一連の T-SQL テストを記述することです。次に、基になるスキーマを変更したときに、これらのテストを使用してその変更により既存の機能が破損していないか検証します。データベース デザインの変更の成功または失敗を評価する単体テストを記述することで、それらの変更を予期したとおりに、エラーを発生させることなく適用できます。データベース単体テストは、ソフトウェア開発者が作成するソフトウェア単体テストを補完するものです。アプリケーション全体に対する変更を管理するには、両方の単体テスト セットが必要です。
単体テストを記述するには、最初に運用データベースから隔離されたデータベース開発環境を作成する必要があります。Visual Studio Team System Database Edition を使用して、次の基本手順を実行します。
データベース プロジェクトを作成します。
運用データベースからそのプロジェクトにスキーマをインポートします。
データベース プロジェクトを配置して、運用データベースと同じスキーマを使用するデータベースを作成します。
データベースにテスト データを設定します。
隔離されたデータベース開発環境を確立してデータを設定した後、その環境内のデータベース オブジェクトを評価する単体テストの記述を開始できます。データベース オブジェクトが以前にもテストされていれば、これらの単体テストを使用して、データベースの変更が原因で発生した機能の不具合を検出できます。分離開発環境でこれらの変更をテストすることで、運用データベースへの影響をなくすことができます。変更のテストが完了した後、他のチーム メンバの変更が含まれる大規模なテスト環境に単体テストを配置し直し、そこで単体テストを使用して、データベースへの追加変更が原因で発生した不具合をすばやく識別して解決できます。
また、手動配置プロセスの一部として単体テストを実行する場合もあります。この場合、ラベル付けされたソースのセットからビルド スクリプトを生成し、必要に応じてビルド スクリプトを編集します。データベースをステージング サーバーに配置した後、データベース単体テストとソフトウェア単体テストを実行してデータベースとアプリケーション全体の状態を検証します。すべてのテストが成功した後、データベースを実稼働環境に配置し直すことができます。詳細については、「データベースの変更の管理」を参照してください。
データベース単体テストの作成
データベース オブジェクトに対する変更を評価するデータベース単体テストを作成できる一方で、Database Edition には、データベース機能、トリガ、およびストアド プロシージャのサポートが含まれています。これらのオブジェクトのテストを作成すると、データベース オブジェクトをテストする、カスタマイズ可能な T-SQL コード スタブが自動的に生成されます。詳細については、「方法 : 関数、トリガ、およびストアド プロシージャのデータベース単体テストを作成する」および「方法 : 空のデータベース単体テストを作成する」を参照してください。
メモ : |
---|
データベース単体テストは、データベース プロジェクトを開かずに作成および実行できます。ただし、テストするオブジェクトから T-SQL スクリプトを生成するには、それらのオブジェクトを含むデータベース プロジェクトを開いておく必要があります。 |
単体テストのデザイン
データベース単体テストは、Visual Studio Team System Test Edition 内にビルドされるその他の種類のテストと同様に、Visual Studio 内に統合されます。データベース単体テスト デザイナを使用すると、Transact-SQL (T-SQL) テスト スクリプトを定義できます。このスクリプトは、データベース スクリプトを実行し、その後それらのスクリプトの結果と、スクリプトのアクションの成功または失敗を示すテスト条件を照合して評価します。
データベース単体テスト デザイナには、次の機能があります。
機能 |
目的 |
ナビゲーション バーの [テスト名] ボックス |
テスト プロジェクトの個々の単体テストの名前をクリックして選択します。同じテスト クラスの各単体テストの前または後に実行するスクリプトを開発する場合は、[共通スクリプト] をクリックします。 |
ナビゲーション バーの [テスト] ボックス |
単体テスト中に異なる時点で評価される T-SQL スクリプトおよびテスト条件を記述するには、[テスト前]、[テスト]、または [テスト後] をクリックします。事前テスト スクリプトを使用すると、開発データベース内に特定の状態を設定できます。テストを実行した後、事後テスト スクリプトを使用すると、データベースを最初の状態に戻すことができます。または必要なアクセス許可に基づき、事後テスト スクリプトを使用してテストが成功したかどうか評価します。 |
T-SQL エディタ |
このエディタを使用して、単体テストで使用する事前テスト、テスト、および事後テストの各 T-SQL スクリプトを記述します。また T-SQL RAISERROR コマンドを使用すると、テスト条件を使用する代わりに、T-SQL アサート ステートメントをテスト スクリプト内に記述できます。このコマンドは、テスト条件と同じく、重大度値に基づいてテストの成功または失敗を示すために使用できます。詳細については、「データベース単体テストでの T-SQL アサーションの使用」を参照してください。 |
テスト条件ペイン |
このウィンドウでテスト条件を使用して T-SQL スクリプトの実行結果を評価します。 |
テスト条件の使用
テスト条件ペインには、結果セットで返される行数、T-SQL スクリプトを実行するのに必要な時間、結果セットが空かどうかなどをテストするための、定義済みのテスト条件セットが用意されています。各定義済みテスト条件には、テスト条件の評価時に呼び出される Assert メソッドが 1 つあります (TestCondition 基本クラスで定義されています)。実行結果と期待される結果とを照合評価するときにテスト条件が失敗すると、その条件は例外をスローし、[テスト結果] ウィンドウには失敗結果が返されます。テスト条件は、例外をスローしないことでテストが成功したことを示します。
テストを実行すると、最初に T-SQL スクリプトが実行され、結果を返します。通常、これは結果セットです。テスト条件の実装により、返される情報のどの部分が評価されて成功と判定されるかが決まります。たとえば、実行時間テスト条件は T-SQL スクリプトの実行に必要な時間を評価し、スカラ値テスト条件は特定の行の値を評価します。この評価の結果に基づき、成功インジケータまたは失敗インジケータが [テスト結果] ウィンドウに表示されます。成功インジケータまたは失敗インジケータは、テスト スクリプトのすべてのテスト条件が成功したと評価されたかどうかにより表示されます。1 つでも条件が例外をスローすると、テストは全体として失敗です。
6 つの定義済みのテスト条件がありますが、テスト条件は拡張可能であるため、必要に応じてその他のテスト条件をテスト条件リストに追加できます。また T-SQL スクリプト内で T-SQL RAISERROR 関数を使用することでも、成功結果または失敗結果を生成して、それを [テスト結果] ウィンドウに表示できます。詳細については、「データベース単体テストでの T-SQL アサーションの使用」を参照してください。
メモ : |
---|
Test Edition で生成する単体テストおよび Database Edition で生成するデータベース単体テストには、[結果不確定] のテスト条件が自動的に追加されます。このテスト条件が評価されると、テストは "不確定" とマークされます。[結果不確定] のテスト条件は InconclusiveException をスローします。既定では、このテスト条件は、その他のアサートまたはテスト条件の追加を促すために、すべてのテストに組み込まれます。このテスト条件は、[テスト条件] ウィンドウで選択して [テスト条件を削除します] アイコンをクリックすることで簡単に削除できます。 |
定義済みテスト条件がすべて掲載されている一覧については、「データベース単体テストでのテスト条件の使用」を参照してください。
テストがタイムアウトになった場合または中止された場合も、そのテストは失敗です。[テスト結果] ウィンドウに表示される結果の詳細については、「主なテスト結果」を参照してください。
単体テストとテスト データ
Team Edition for Database Professionals のデータ生成機能を使用すると、テスト データをデータベース環境に追加できます。この機能には、特定のシード値を与えると同じデータを生成するデータ ジェネレータのグループが含まれています。これにより、データを生成し、生成されたデータベースを検査してさまざまなテストが生成した結果を確認し、それに応じてテストを記述できます。単体テストでデータ生成を使用する方法については、「チュートリアル : データベース単体テストの作成と実行」を参照してください。各種のデータ ジェネレータの詳細については、「データ生成の概要」を参照してください。
コマンド ラインでのテスト
テストの実行を自動化するために、IDE 内またはコマンド プロンプトでデータベース単体テストを実行できます。詳細については、「コマンド ライン テスト実行」を参照してください。