データベース単体テストに関する問題のトラブルシューティング
データベースに対して単体テストを実行するとき、このトピックで説明する問題が発生する場合があります。
単体テストの実行時またはテスト データの生成時のアクセス許可が不足している
単体テストの実行時に単体テストおよび App.Config の変更が無視される
単体テストの実行時に予期しないターゲットにデータベースが配置される
データベースの単体テストの実行時にタイムアウトが発生する
単体テストの実行時またはテスト データの生成時のアクセス許可が不足している
データベースが自動的に配置され、データが生成されるように、単体テストを構成できます。 ターゲット データベースにデータを生成するためのアクセス許可が不足している場合は、データベースに接続するためのアクセス許可が不足していることのみを示すエラーが表示されることがあります。
注意
この問題に対処するには、手動でデータ生成計画を実行します。 データを生成するためのアクセス許可が不足している場合は、この方法を使用すると、問題の解決に役立つ詳細なエラー メッセージが表示されます。
単体テストの実行時に単体テストおよび App.Config の変更が無視される
テスト プロジェクトの App.Config ファイルを変更する場合、変更内容を有効にするには、テスト プロジェクトをリビルドする必要があります。 これらの変更には、[プロジェクト構成] ダイアログ ボックスを使用して App.Config に対して行う変更も含まれます。 テスト プロジェクトをリビルドしない場合は、単体テストを実行したときに変更内容が適用されません。
単体テストの実行時に予期しないターゲットにデータベースが配置される
単体テストを実行するときにデータベースを配置する場合は、単体テスト構成で指定された接続文字列情報を使用してデータベースが作成されます。 データベース プロジェクトのビルド プロパティで指定された接続情報はこのタスクでは使用されないため、同じデータベースの各インスタンスに対してそれぞれ異なる単体テストを実行できます。
データベースの単体テストの実行時にタイムアウトが発生する
タイムアウトのためにデータベースの単体テストが失敗する場合、データベース プロジェクトの app.config ファイルを更新することによってタイムアウト間隔を長くすることができます。 接続文字列のタイムアウトは、単体テストがサーバーに接続する際に待機する時間を指定します。 コマンド タイムアウトは、単体テストが Transact-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>