14

作成したカスタムConfigurationSectionを単体テストしようとしていますが、テスト構成xmlをTests.dllに配置するのではなく、任意の構成XMLを各テストのSystem.Configuration.Configurationにロードしたいと思います。設定ファイル。つまり、次のようなことをしたいと思います。

Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);

ただし、ConfigurationManagerは、EXEファイルまたはマシン構成に関連付けられている構成インスタンスのみを提供するようです。任意のXMLを構成インスタンスにロードする方法はありますか?

4

3 に答える 3

17

実は私が発見した方法があります....

次のように、元の構成セクションから継承する新しいクラスを定義する必要があります。

public class MyXmlCustomConfigSection : MyCustomConfigSection
{
    public MyXmlCustomConfigSection (string configXml)
    {
        XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
        DeserializeSection(reader);
    }
}


その後、次のように ConfigurationSection オブジェクトをインスタンス化できます。

string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>";
MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);

それが誰かを助けることを願っています:-)

于 2009-04-01T09:47:59.623 に答える
1

あなたが探しているのはConfigurationManagerだと思います。OpenMappedExeConfiguration

これにより、ファイルパス( ExeConfigurationFileMap内にラップされている)で指定した構成ファイルを開くことができます。

他の投稿者が言ったことが真実であり、テスト用にまったく新しいXMLファイルを作成したくない場合は、構成の編集をTestメソッド自体に入れてから、新しく変更された構成に対してテストを実行することをお勧めします。データ。

于 2008-08-24T09:02:25.853 に答える
0

クラスのメンバーを見ると、答えはおそらくノー*だと思います。独自の XML 構成ファイルを作成するのではなく、とにかくこれを行う理由がわかりません。

*いいえ、厄介な反射ハックを除いて

于 2008-08-21T20:02:26.370 に答える