データベース単体テストに関する問題のトラブルシューティング
データベースに対して単体テストを実行するとき、このトピックで説明する問題が発生する場合があります。
単体テストの実行時またはテスト データの生成時のアクセス許可が不足している
番号付きストアド プロシージャに対して単体テストを実行するときに問題が発生する
単体テストの実行時に単体テストおよび App.Config の変更が無視される
単体テストの実行時に予期しないターゲットにデータベースが配置される
データベースの単体テストの実行時にタイムアウトが発生する
単体テストの実行時またはテスト データの生成時のアクセス許可が不足している
データベースが自動的に配置され、データが生成されるように、単体テストを構成できます。 ターゲット データベースにデータを生成するためのアクセス許可が不足している場合は、データベースに接続するためのアクセス許可が不足していることのみを示すエラーが表示されることがあります。
メモ : |
---|
この問題に対処するには、手動でデータ生成計画を実行します。 データを生成するためのアクセス許可が不足している場合は、この方法を使用すると、問題の解決に役立つ詳細なエラー メッセージが表示されます。 |
番号付きストアド プロシージャに対して単体テストを実行するときに問題が発生する
番号付きストアド プロシージャ (MyProcedure;2 など) を含むデータベース用のデータベース単体テストを作成する場合は、[単体テストの作成] ダイアログ ボックスに番号指定が表示されません。 1 つ以上のストアド プロシージャの複数の番号付きバージョンがある場合は、この動作が原因で、同じプロシージャ名が複数回表示されることがあります。
また、それらのストアド プロシージャをテストするために生成されるスクリプトで、番号指定が欠落していることがあります。たとえば、MyProcedure;2 という名前のプロシージャの単体テストを生成する場合、スクリプトは次のようになります。
EXEC @RC = [dbo].[MyProcedure]
メモ : |
---|
この問題に対処するには、単体テストを実行する前に、生成されたスクリプトを変更して番号指定を再び追加します。 複数の番号付きストアド プロシージャの単体テストを生成した場合は、各テストを修正する必要があります。 |
単体テストの実行時に単体テストおよび App.Config の変更が無視される
テスト プロジェクトの App.Config ファイルを変更する場合、変更内容を有効にするには、テスト プロジェクトをリビルドする必要があります。 これらの変更には、[プロジェクト構成] ダイアログ ボックスを使用して App.Config に対して行う変更も含まれます。 テスト プロジェクトをリビルドしない場合は、単体テストを実行したときに変更内容が適用されません。
単体テストの実行時に予期しないターゲットにデータベースが配置される
単体テストを実行するときにデータベースを配置する場合は、単体テスト構成で指定された接続文字列情報を使用してデータベースが作成されます。 データベース プロジェクトのビルド プロパティで指定された接続情報はこのタスクでは使用されないため、同じデータベースの各インスタンスに対してそれぞれ異なる単体テストを実行できます。
データベースの単体テストの実行時にタイムアウトが発生する
タイムアウトのためにデータベースの単体テストが失敗する場合、データベース プロジェクトの app.config ファイルを更新することによってタイムアウト間隔を長くすることができます。 接続文字列のタイムアウトは、単体テストがサーバーに接続する際に待機する時間を指定します。 コマンド タイムアウトは、単体テストが Transact-SQL (T-SQL) スクリプトを実行するときに待機する時間を指定します。
メモ : |
---|
この問題を解決するには、テスト プロジェクトの app.config ファイルにある該当するコンテキスト要素の CommandTimeout 属性に指定する値を大きくします。 たとえば、PrivilegedContext 要素のコマンド タイムアウトに 120 秒を指定するには、以下のように app.config を更新します。 |
<DatabaseUnitTesting>
<DatabaseDeployment DatabaseProjectFileName="test.dbproj" Configuration="Debug" />
<DataGeneration DataGenerationFileName="test.dgen" ClearDatabase="true" />
<ExecutionContext Provider="System.Data.SqlClient" ConnectionString="another connection string" />
<PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="test" CommandTimeout=”120” />
</DatabaseUnitTesting>
参照
処理手順
方法 : 関数、トリガ、およびストアド プロシージャのデータベース単体テストを作成する