チュートリアル : 分離開発環境のベースライン設定
このチュートリアルでは、データベース プロジェクトを作成し、バージョン管理の対象にしました。 データベース プロジェクトには、実稼働サーバーのスキーマ定義と一致するスキーマ定義が含まれています。 データベース プロジェクトでの開発作業を開始する前に、データベース単体テストのセットアップ、データ生成計画の定義、テスト データの生成、およびテストの実行を行って、品質のベースラインを確立します。 テスト実行により、データベースがビルドされ、分離開発環境に配置され、生成データがデータベースに設定され、単体テストが実行されて結果が報告されます。
このチュートリアルでは、以下のタスクを行います。
分離開発環境のビルド設定をカスタマイズする。
データベースをビルドし、分離開発環境に配置する。
データベース プロジェクトに含まれるストアド プロシージャ用の単体テストを定義する。
テスト データを生成し、単体テストをビルドして実行する。
単体テストをソリューションの一部としてバージョン管理して、開発チームと共有する。
前提条件
Visual Studio Team System Database Edition がインストールされていて、SQL Server 2005 の AdventureWorks2005 サンプル データベースに対するアクセス許可を持っている必要があります。 「チュートリアル : 隔離されたデータベース開発環境の作成」の手順も完了しておく必要があります。
分離開発環境のビルド設定をカスタマイズするには
ソリューション エクスプローラで既に AdvWorksSandbox ソリューションが開かれている場合は、手順 4. に進みます。
[ファイル] メニューの [開く] をポイントし、[プロジェクト/ソリューション] をクリックします。
[プロジェクトを開く] ダイアログ ボックスが表示されます。
AdvWorksSandbox ソリューションをクリックし、[開く] をクリックします(既定では、このソリューションは My Documents\Visual Studio 2008\Projects\AdvWorksSandbox にあります)。
ソリューション エクスプローラで AdvWorksSandbox ソリューションが開きます。
ソリューション エクスプローラで、[AdvWorksSandbox] ノードをクリックします。
[プロジェクト] メニューの [AdvWorksSandbox のプロパティ] をクリックします。
[配置] タブをクリックします。
[配置設定の構成] ボックスの一覧の [分離開発環境] をクリックします。
[ターゲット接続] の横の [編集] をクリックします。
[接続のプロパティ] ダイアログ ボックスが表示されます。
ここで、ローカルの分離開発環境の接続文字列をカスタマイズすることができます。 変更内容がチームの他のメンバに悪影響を与えないように、各データベース開発者がデータベースのプライベート コピーを更新するようにすることをお勧めします。 開発者が変更をテストして、チームと共有できるようになったら、中央集中バージョン管理システムを使用して変更を共有します。 「チュートリアル : 隔離されたデータベース開発環境の作成」では、ターゲット データベース名を設定しましたが、接続は設定しませんでした。
分離開発環境に使用するサーバーの名前を入力するか、クリックします。 たとえば、ローカル インスタンスを使用するには、「(local)」と入力します。
データベース サーバーへの接続に使用する認証の種類をクリックします。
既定では、Windows 認証が指定されています。
[OK] をクリックします。
[ターゲット接続] に接続情報が表示されます。
[配置構成ファイル] ボックスの一覧の [Properties\Database.sqldeployment] をクリックします。
[SQL コマンド変数ファイルの設定] ボックスの一覧の [Properties\Database.sqlcmdvars] をクリックします。
[ファイル] メニューの [選択されたファイルを上書き保存] をクリックし、データベース プロジェクトのプロパティへの変更を保存します。
データベースをビルドし、分離開発環境に配置するには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
データベース プロジェクトがビルドされ、[出力] ウィンドウに結果が表示されます。
ソリューション エクスプローラで、[AdvWorksSandbox] ノードをクリックします。
[ビルド] メニューの [ProjectName の配置] をクリックします。 [AdvWorksSandbox] ノードを右クリックし、[配置] をクリックすることもできます。
データベース プロジェクトがビルドされ、ビルド スクリプトが生成されて、データベース プロジェクトのプロパティで指定した隔離されたデータベース開発サーバーにそのスクリプトが配置されます。
次に、分離開発環境用のテスト データを生成します。
単体テストの定義
通常、すべてのストアド プロシージャ、関数、およびトリガに対して単体テストを定義します。 このチュートリアルでは、例として 1 つの単体テストのみを定義します。 ufnLeadingZeros 関数と dbo.uspGetManagerEmployees ストアド プロシージャのテストを定義します。
ufnLeadingZeros 関数は整数を受け取り、その整数の VARCHAR(8) 文字列形式を、先頭に 0 を埋め込んで返します。 この関数をテストするには、値を渡し、予期された結果が得られるかどうかをテストします。
uspGetManagerEmployees ストアド プロシージャは従業員 ID を受け取り、指定された ID のマネージャを経由して報告するすべての階層のすべての従業員を返します。 同じシード値が指定されているときは、データ ジェネレータは同じテスト データを生成するため、返される行数がわかります。 このテストは単純です。 実際のプロジェクトでは、さらに詳細なテストを作成して、正しい従業員が返されたかどうかを検証する場合があります。
単体テストを作成するには
[表示] メニューの [スキーマ ビュー] をクリックします。
スキーマ ビューがまだ表示されていない場合は、表示されます。
スキーマ ビューで、[スキーマ] フォルダ、[dbo] フォルダ、[プログラミング] フォルダの順に開きます。
[ストアド プロシージャ] フォルダを右クリックし、[単体テストの作成] をクリックします。
[単体テストの作成] ダイアログ ボックスが表示されます。
[現在の選択] ツリーを展開し、dbo.uspGetManagerEmployees ストアド プロシージャと dbo.ufnLeadingZeros 関数の両方のチェック ボックスをオンにします。 チェック ボックスがオンになっているストアド プロシージャと関数が他にもある場合は、それをオフにします。
メモ : プロジェクトに実際のベースラインを確立する場合、データベースのすべての関数、ストアド プロシージャ、およびトリガに対して単体テストを作成することもあります。 このチュートリアルでは、処理を説明するために 1 つのストアド プロシージャと 1 つの関数に焦点を当てます。
[プロジェクト] の [新しい Visual C# テスト プロジェクトの作成] をクリックします。
[新しいプロジェクト名] で、「AWSandboxTestProject」と入力し、[OK] をクリックします。
単体テスト プロジェクトが作成され、単体テストの [プロジェクト構成] ダイアログ ボックスが表示されます。
[データベース接続] の AdvWorksSandbox への接続をクリックします。
[配置] の [テスト実行前にデータベース プロジェクトを自動配置] チェック ボックスをオフにします。
[データベース状態] の [単体テスト実行前にテスト データを生成] チェック ボックスをオンにします。
[データベース状態] ボックスの一覧で、[AWGenPlan.dgen] をクリックします。
[テスト データ生成前にデータベースをクリア] チェック ボックスがまだオンになっていない場合はオンにし、[OK] をクリックします。
データベース単体テスト プロジェクトが作成され、ソリューションに追加されます。 データベース単体テスト デザイナが開いて、テスト条件を変更し、テストを作成できるようになります。
メモ : テスト構成を変更する必要がある場合は、[テスト] メニューを開き、[データベース テスト構成] をクリックします。 [プロジェクト構成] ダイアログ ボックスが表示され、構成を変更できます。
次に、テスト条件を指定し、テストを作成します。
ufnLeadingZeros 関数の単体テストを定義するには
データベース単体テスト デザイナのテスト一覧で、[dbo.ufnLeadingZeros] をクリックします。
2 番目の一覧に [Test] と表示されていることを確認します。
デザイナの上部のペインで、Transact-SQL (T-SQL) ステートメントを次のように置き換えます。
-- db unit test for dbo.ufnLeadingZeros DECLARE @RC VARCHAR (8), @Value INT SELECT @RC = NULL, @Value = 27 SELECT @RC = [dbo].[ufnLeadingZeros]( @Value) IF @RC <> '00000027' RAISERROR(N'ufnLeadingZero: expected "00000027" but got %s.', 16, 1, @RC) SELECT RC=@RC
テスト条件ペインで、種類が [結果不確定] のテスト条件をクリックし、[テスト条件を削除します] (x) をクリックして削除します。
テスト条件ペインの一覧で、[行数] をクリックし、[テスト条件を追加します] (+) をクリックして行数テスト条件を追加します。
[プロパティ] ウィンドウで、Row Count プロパティを 1 に設定します。
テストを強制的に失敗させる場合、@Value を 27 から別の値に変更します。
uspGetManagerEmployees ストアド プロシージャの単体テストを定義するには
データベース単体テスト デザイナのテスト一覧で、[dbo.uspGetManagerEmployees] をクリックします。
2 番目の一覧に [Test] と表示されていることを確認します。
デザイナの上部のペインで Transact-SQL (T-SQL) ステートメントを次のように記述します。
-- db unit test for dbo.uspManagerEmployees DECLARE @RC VARCHAR (8), @ManagerID INT SELECT @RC = NULL, @ManagerID = 9 EXEC @RC = [dbo].[uspGetManagerEmployees] @ManagerID SELECT RC=@RC
テスト条件ペインで、種類が [結果不確定] のテスト条件をクリックし、[テスト条件を削除します] (x) をクリックして削除します。
テスト条件ペインの一覧で、[行数] をクリックし、[テスト条件を追加します] (+) をクリックして行数テスト条件を追加します。
[プロパティ] ウィンドウで、Row Count プロパティを 4 に設定します。
メモ : ストアド プロシージャのパラメータ値と予期される結果を確認するため、データ生成後に Transact-SQL (T-SQL) エディタを使用して [HumanResources].[Employee] テーブルの内容を検証することができます。この場合、11 人の階層の最上位に EmployeeID が 1 である従業員が表示されます。したがって、ストアド プロシージャは 11 行のデータを返します。 同じシード値を使用してテスト データを生成する限り、実行するたびに同じデータが返されます。
これで、単体テストを実行できるようになりました。
単体テストのビルドと実行
単体テストの定義が完了したので、テストをビルドして実行できます。
単体テストをビルドして実行するには
ソリューション エクスプローラで、ソリューション ノードを右クリックし、[ソリューションのリビルド] をクリックします。
この手順では、データベース プロジェクトおよび単体テスト プロジェクトを強制的にリビルドして、すべてが最新になるようにします。
[テスト] メニューの [ウィンドウ] をポイントし、[テスト リスト エディタ] をクリックします。
[テスト ビュー] ウィンドウにテストがいくつか表示されます。 ManualTest1 および TestMethod1 という名前のテストは、既定で作成されたテストです。 dbo_uspGetManagerEmployeesTest および dbo_ufpLeadingZeroTest という名前のテストが、このチュートリアルで作成したテストです。
dbo_uspGetManagerEmployeesTest と dbo_ufpLeadingZeroTest 両方のチェック ボックスをオンにし、どちらかを右クリックして、[選択されたテストを実行] をクリックします。
[テスト結果] ウィンドウの結果を確認します。
分離開発環境にデータベース プロジェクトが配置され、テスト データが生成され、テストが実行されて合格します。
保留中の変更のチェックイン
これで、変更によってデータベースが破損するかどうかを検出する単体テストが定義できたので、テストをチェックインして、ソリューションをチームと共有できるようになりました。
ソリューションをチームと共有するには
[表示] メニューの [その他のウィンドウ] をポイントし、[保留中の変更] をクリックします。
[保留中の変更] ウィンドウが表示されます。
[コメント] に、「Defined data generation plan and baseline unit tests」と入力します。
[保留中の変更] ウィンドウで、ツール バーの [チェックイン] をクリックします。
データベース プロジェクトおよびそれに含まれているファイルがバージョン管理されるときに、[チェックインの進行状況] ダイアログ ボックスが表示されます。 ソリューション エクスプローラ内のアイコンが更新され、ファイルがバージョン管理にチェックインされたことを示します。
次の手順
これで、ソリューションをバージョン管理にチェックインしたので、チームの各メンバが割り当てられたタスクの作業を行うことができます。 各メンバは、変更を共有できるようになるまで、隔離されたデータベース開発環境で作業することができます。
「チュートリアル : 分離開発環境でデータベースの開発を繰り返し実行する」では、リファクタリングを使用して、分離開発環境のデータベース オブジェクトの名前を変更します。 チェックインする前に変更をビルド、配置、およびテストすると、チームの他のメンバは、自分の分離開発環境とその変更を同期できます。
参照
処理手順
チュートリアル : 分離開発環境でデータベースの開発を繰り返し実行する