Есть ли способ получить экземпляр System.Configuration.Configuration на основе произвольного XML?
-
09-06-2019 - |
Вопрос
Я пытаюсь выполнить модульное тестирование написанного мной пользовательского раздела ConfigurationSection и хотел бы загрузить произвольный XML-файл конфигурации в Система.Конфигурация.Конфигурация для каждого теста (вместо помещения XML-конфигурации теста в файл Tests.dll.config.То есть я хотел бы сделать что-то вроде этого:
Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);
Однако это похоже на Диспетчер конфигурации предоставит вам только экземпляры конфигурации, связанные с EXE-файлом или конфигурацией компьютера.Есть ли способ загрузить произвольный XML в экземпляр конфигурации?
Решение
На самом деле я нашел способ....
Вам необходимо определить новый класс, унаследованный от исходного раздела конфигурации, следующим образом:
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);
Надеюсь, кому-то поможет :-)
Другие советы
Я думаю, что вы ищете ConfigurationManager.Опенмаппедексеконфигуратион
Он позволяет вам открыть файл конфигурации, указанный вами с указанием пути к файлу (завернутого в ExeConfigurationFileMap)
Если то, что сказал другой автор, верно, и вы не хотите создавать совершенно новый XML-файл для тестирования, я бы рекомендовал вам внести изменения в конфигурацию в сам метод Test, а затем запустить тесты для недавно измененной конфигурации. данные.
Глядя на членов класса, я бы сказал, что ответ, вероятно, отрицательный*.Я не уверен, почему вы вообще хотите это сделать, а не создавать свой собственный файл конфигурации XML.
*Нет, за исключением грязных хаков с отражениями.