Я пытаюсь выполнить модульное тестирование написанного мной настраиваемого 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);
Однако похоже, что Диспетчер конфигурации предоставит вам только экземпляры конфигурации, связанные с EXE-файлом или конфигурацией компьютера. Есть ли способ загрузить произвольный XML в экземпляр конфигурации?





Глядя на членов класса, я бы сказал, что ответ, вероятно, отрицательный *. Я не уверен, почему вы все равно захотите это сделать, а не создавать свой собственный файл конфигурации XML.
* Это нет, за исключением грязных хаков с отражением
Я думаю, что вы ищете ConfigurationManager.OpenMappedExeConfiguration
Он позволяет вам открыть файл конфигурации, который вы укажете с путем к файлу (заключенный в ExeConfigurationFileMap)
Если то, что сказал другой плакат, верно, и вы не хотите создавать полностью новый 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);
Надеюсь, это кому-то поможет :-)
Хотя пользовательское чтение XML является хорошим решением, фрагмент XML неверен. DeserializeSection ожидает, что xml будет просто частью раздела, например <MySection> <MyConfig> <add key = "key" value = "value" /> </MyConfig> </MySection>
реквизит для фактического ответа на его вопрос.