0

コード ファーストの Entity Framework オブジェクトを実装する DbContext から継承するクラスがあります。

この dbcontext でモデル ビルダーを実行する単体テストが必要です。これは、「キーがエンティティで定義されていません」などのエラーを検出するのに役立ちます。

しかし、単体テスト中に実際のデータベースを利用できない場合があります。実際にコンテキストとのデータベース接続を試みずに、このコードを実行する方法はありますか? 私は次のような無害なことを試しました:

var ctx = new MyDbContext("Data Source=(local);Initial Catalog=Dummy;<.......>");
var foo = ctx.GetValidationErrors();  //triggers DBModelBuilder, should throw if my DBModel is goofed up

これは技術的に機能します。ただし、これは実行に非常に長い時間がかかります。コール スタックを一時停止して検査すると、System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin への呼び出しがトリガーされます。

最終的にタイムアウトになり、接続エラーを飲み込んでテストを終了します。

接続を試みずにこれを行う方法はありますか?

4

1 に答える 1

0

ここでの解決策は、問題に対処し、可能な限り低い接続タイムアウトを使用することです。私はこの接続文字列を使用しています:

サーバー=localhost; データベース = tempdb; 統合セキュリティ=true;接続タイムアウト=1;ConnectRetryCount=0

それでも問題は発生しますが、タイムアウトが 1 秒で、自動再試行がない場合 (システム内のこの 1 つのテストのみ) は、まったく問題ありません。

また、開発者がローカル データベースをインストールしている場合は、誤ってさらに高速に動作します。

于 2015-02-05T20:27:28.487 に答える