Existe uma maneira de obter uma instância System.Configuration.Configuration baseada em XML arbitrário?
-
09-06-2019 - |
Pergunta
Estou tentando testar a unidade de uma ConfigurationSection personalizada que escrevi e gostaria de carregar algum XML de configuração arbitrária em um Sistema.Configuração.Configuração para cada teste (em vez de colocar o xml de configuração do teste no arquivo Tests.dll.config.Ou seja, eu gostaria de fazer algo assim:
Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);
No entanto, parece Gerenciador de configuração fornecerá apenas instâncias de configuração associadas a um arquivo EXE ou a uma configuração de máquina.Existe uma maneira de carregar XML arbitrário em uma instância de configuração?
Solução
Na verdade, há uma maneira que descobri....
Você precisa definir uma nova classe herdada de sua seção de configuração original da seguinte forma:
public class MyXmlCustomConfigSection : MyCustomConfigSection
{
public MyXmlCustomConfigSection (string configXml)
{
XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
DeserializeSection(reader);
}
}
Você pode então instanciar seu objeto ConfigurationSection da seguinte maneira:
string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>";
MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);
Espero que ajude alguém :-)
Outras dicas
Acho que o que você está procurando é o ConfigurationManager.Configuração OpenMappedExe
Ele permite que você abra um arquivo de configuração especificado com um caminho de arquivo (envolvido dentro de um ExeConfigurationFileMap)
Se o que o outro autor da postagem disse for verdade e você não deseja criar um arquivo XML totalmente novo para teste, recomendo que você coloque suas edições de configuração no próprio método de teste e execute seus testes na configuração recém-alterada dados.
Olhando para os membros da turma, eu diria que a resposta provavelmente é não*.Não sei por que você deseja fazer isso, em vez de criar seu próprio arquivo de configuração XML.
*Isso não, excluindo hacks de reflexão confusos