2

単体テストを書いているライブラリがあります。ライブラリは 2 つのアプリケーションで使用されます。1 つは Windows サービスで、もう 1 つはレジストリの読み書きを行うコマンドライン アプリケーションです。それぞれに、起動時にライブラリからロードされる App.config ファイルがわずかに異なります。例えば:

    public RetentionService()
    {
        SettingHive = new Hive();
        TimingService = new RetentionTimingService(SettingHive);

        AppSettingsReader asr = new AppSettingsReader();
        object appsListObj = asr.GetValue(@"blocking-process-list", Type.GetType(@"System.String"));
        string appsList = appsListObj.ToString();
        _BlockingAppNames = RetentionService.ListFromList(appsList);

        string targetList = asr.GetValue(@"target-files", Type.GetType(@"System.String")).ToString();
        _TargetLogs = RetentionService.ListFromList(targetList);
    }

単体テストからこのライブラリを使用しようとすると、ライブラリ (おそらく nunit) をロードするアプリケーションに適切なキーを持つ *.exe.config ファイルがないため、ロードに失敗します。

これを行うためのより良い方法は何ですか? 本番環境ではライブラリに各アプリケーションの *.exe.config から設定をロードさせたいのですが、単体テストを実行する場合は 3 番目の場所からロードします。

4

3 に答える 3

3

または、関連情報を含む単体テスト プロジェクトに app.config ファイルを追加するだけです。

于 2009-03-10T21:35:16.313 に答える
2

単体テストがコードをテストするように設計されている場合は、構成ファイルにまったく依存しないでください。クラスから依存関係を抽出し、依存性注入を使用してデータを注入します。これにより、構成クラスをスタブ化できます。

実際に構成ファイルをテストしているだけの場合は、 ConfigurationManagerを使用して明示的にロードできるはずですが、構成データの単体テストはお勧めしません。スモークテストに適しています。

于 2009-03-10T21:32:27.927 に答える
1

最善の策は、実行時に必要に応じてリダイレクトできるプロキシ クラス内の構成データへのアクセスをラップすることです。組み込み API を直接使用しないでください。

于 2009-03-10T21:26:16.163 に答える