2

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

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

4

4 に答える 4

2

私が通常行うことは、使用する接続文字列を決定する機能を保持する構成セクションを作成することです。

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

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

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

複数の構成ファイル ルートに行かない理由は、テスト スイート (NUnit テストランナーなど) で実行するときに構成ファイルを使用できないためです。

于 2009-06-22T13:25:42.450 に答える
1

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

于 2009-06-22T13:19:15.133 に答える
1

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

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

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

Imperative Configurationについては少し書きましたが、一般的には Roy Osherove の本The Art of Unit Testingを読む必要があります。この本はこれらの問題の多くを扱っています。

于 2009-06-22T13:25:33.793 に答える
0

構成ファイルに接続文字列を保持することは一般的な方法です。これを行う場合は、異なるコンテキストで異なる構成ファイルを使用してください。

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

于 2009-06-22T13:24:31.563 に答える