bugfix> c# > 投稿

クラスライブラリ MultipleConfigFiles を作成しました 、メソッド getConfigData があります 。このメソッドは、構成ファイルからデータを読み取ります。

public class Class1
    {
      public string getConfigData()
      {
        string configData = ConfigurationManager.AppSettings["key"].ToString();
        return configData;
      }
    }

今、私はコンソールアプリケーション ConsoleAppConfig を持っています 、ここでクラスライブラリの参照を指定しました。メインメソッドでは、ライブラリクラスのオブジェクトを作成し、メソッドを呼び出しました。

static void Main(string[] args)
        {
            Class1 c = new Class1();
            string data = c.getConfigData();
            Console.Write(data);    
        }

このコンソールアプリケーションには2つの異なる設定ファイル dev.config がありますおよび prod.config 。メインのApp.configファイルでは、configSourceを使用して適切な構成ファイルをマップしています。

<appSettings configSource="dev.config" />

Dev.configファイルは次のようになります。

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
    <add key="key" value="dev" />
</appSettings>

ここまでは正常に動作しています。つまり、コンソールアプリを実行すると、メソッドは dev を返します。 。

今、このクラスライブラリのMSTestプロジェクトを作成しました。

public class Class1Tests
    {
        [TestMethod()]
        public void getConfigDataTest()
        {
            Class1 obj = new Class1();
            var result = obj.getConfigData();                
        }
    }

問題は、このテストを実行すると、次のエラーがスローされることです。
「タイプ 'System.NullReferenceException'の例外がMultipleConfigFiles.dllで発生しましたが、ユーザーコードでは処理されませんでした。 追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていません。」

構成ファイルはConsoleApplicationにあるため、メソッドはそこからappsetting変数を読み取ることができません。両方が個別に使用するように構成ファイルをグローバルに維持する方法はありますか、これを処理するより良い方法はありますか?

どんな入力でも大歓迎です。ありがとう。

回答 1 件
  • ファイルを複製せずに、既存の単体テストプロジェクトのファイルをリンクできます。 画像リンク(https://grantwinney.com/content/images/2014/04/AddExistingFileAsLink-002.png)に記載されているのと同じことを試すことができます。

    詳細については、この用語「Visual Studio-リンクとしてファイルを追加」

    画像クレジット:https://grantwinney.com

あなたの答え