接続文字列を交換して、単体テスト用のテストデータベースにアクセスするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1027155

質問

最近追加したアプリの単体テストを開始するために、テストデータベースを設定しました。これは3層設計(プレゼンテーションレイヤー、BOLおよびDAL)であり、ユニットテストを書くのはこれが初めてです。

BOLから始めることにしましたが、最善の方法は、ConnectionString(共有文字列として渡されている)を新しいテストデータベースを指すものと交換することです。ただし、製品コードを変更したくありません。単体テスト中に、どういうわけかアプリをテストデータベースにリダイレクトしたいだけです。どうすればこれを達成できますか?

役に立ちましたか?

解決

通常は、使用する接続文字列を決定する機能を保持する構成セクションを作成します。

基本的な例を次に示します。

static ConfigurationSettings
{
     static String ConnectionString
     {
        get
        {
           var result = "TESTCONNECTIONSTRING";
           if (ConfigurationManager.ConnectionStrings["SOMEKEY"] != null)
               result = ConfigurationManager.ConnectionStrings["SOMEKEY"];
           return result;
     }
}

この方法では、システムへの接続方法について心配する必要はありません。また、テストでこの動作をオーバーライドして、セッターを追加することで目的を達成することもできます。

複数の設定ファイルを使用しないのは、テストスイート(NUnitテストランナーなど)で実行している場合、設定ファイルを使用できないためです。

他のヒント

接続文字列は設定ファイルから来ていますか?単体テストで一致する構成を設定できますか?

とにかくすぐにわかると思いますが、静的/共有コードは、さまざまな理由から、単体テストではと見なされます。これらの理由の1つは、単体テスト中に値を変更することが難しいことです。

依存関係をテスト対象システム(SUT)に明示的に(できればコンストラクターで)渡すことをお勧めします。あなたの場合、コンストラクタを介して接続文字列をSUTに渡す必要があります。

さらに優れたアプローチは、インターフェイスの背後にあるデータアクセス層を抽象化し、そのインターフェイスのインスタンスをSUTに渡すことです。

Imperative Configuration について少し書きましたa>、しかし一般的に、あなたはロイ・オセロヴェの本 The Art of Unit Testing -これらの問題の多くを処理します。

接続文字列を設定ファイルに保存することは一般的な方法です。これを行う場合、異なるコンテキストで異なる設定ファイルを使用するだけです。

変更しない場合も可能性があります(ただし、生産コードを変更する必要がある場合があります)。接続文字列は、コンストラクターまたはセッターを介して注入されます。次に、本番では、本番接続文字列を使用します。テストでは、テストデータベースに接続できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top