Есть ли способ получить экземпляр System.Configuration.Configuration на основе произвольного XML? - PullRequest
14 голосов
/ 21 августа 2008

Я пытаюсь выполнить модульное тестирование пользовательской конфигурации ConfigurationSection, которую я написал, и я хотел бы загрузить некоторый произвольный XML-файл конфигурации в System.Configuration.Configuration для каждого теста (вместо того, чтобы поставить проверить конфигурацию xml в файле Tests.dll.config, то есть я бы хотел сделать что-то вроде этого:

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

Однако, похоже, что ConfigurationManager выдаст только те экземпляры конфигурации, которые связаны с EXE-файлом или конфигурацией компьютера. Есть ли способ загрузить произвольный XML в экземпляр конфигурации?

Ответы [ 3 ]

15 голосов
/ 01 апреля 2009

На самом деле я нашел способ ...

Вам необходимо определить новый класс, унаследованный от исходного раздела конфигурации, следующим образом:

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);

Надеюсь, это кому-нибудь поможет: -)

1 голос
/ 24 августа 2008

Я думаю, что вы ищете ConfigurationManager. OpenMappedExeConfiguration

Позволяет открыть файл конфигурации, указанный вами, с путем к файлу (обернутый в ExeConfigurationFileMap )

Если то, что сказал другой автор, является правдой, и вы не хотите создавать новый XML-файл для тестирования, то я бы порекомендовал вам внести изменения в конфигурацию в сам метод Test, а затем выполнить свои тесты на недавно измененные данные конфигурации.

0 голосов
/ 22 августа 2008

Глядя на учеников класса, я бы сказал, что ответ, вероятно, нет *. Я не уверен, почему вы все равно хотите это сделать, а не создавать свой собственный XML-файл конфигурации.

* Это не так, исключая грязные рефлексы

...