2008-08-21 4 views
14

Ich versuche Unit-Test eine benutzerdefinierte ConfigurationSection, die ich geschrieben habe, und ich möchte einige willkürliche XML-Konfiguration in eine System.Configuration.Configuration für jeden Test laden (anstatt die Testkonfiguration XML in der Datei Tests.dll.config . das heißt, würde Ich mag so etwas tun:Gibt es eine Möglichkeit, eine System.Configuration.Configuration-Instanz basierend auf beliebigem XML zu erhalten?

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

es ist jedoch wie ConfigurationManager nur Sie Konfiguration geben Instanzen sucht, die mit einer EXE-Datei oder einer Maschine Config zugeordnet sind gibt es eine Möglichkeit zu. lade willkürliche XML in eine Konfigurationsinstanz?

Antwort

15

Es gibt tatsächlich eine Weise, die ich entdeckt habe ....

Sie benötigen eine neue Klasse von Ihrem ursprünglichen Konfigurationsabschnitt vererben wie folgt zu definieren:

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


Sie können dann instanziiert wie folgt Ihr Configuration Objekt:

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

Hoffe, es hilft jemand :-)

+0

Requisiten für die tatsächliche Beantwortung seiner Frage. –

0

Mit Blick auf die Mitglieder der Klasse, würde ich sagen, die Antwort ist wahrscheinlich nicht *. Ich bin mir nicht sicher, warum Sie w Um dies trotzdem zu tun, anstatt eine eigene XML-Konfigurationsdatei zu erstellen.

* Das ist nicht, ohne unordentlich Reflexion hackt

1

Ich denke, was Sie suchen ist Configuration. OpenMappedExeConfiguration

Es ermöglicht Ihnen, eine Konfigurationsdatei zu öffnen, die Sie mit einem Dateipfad angeben (eingewickelt in einem ExeConfigurationFileMap)

Wenn das, was der andere Plakat sagte wahr ist, und Sie nicht möchten, dass eine ganz neue schaffen XML-Datei zum Testen, dann würde ich empfehlen, dass Sie Ihre Konfigurationsänderungen in der Test-Methode selbst vornehmen, dann führen Sie Ihre Tests mit den frisch geänderten Konfigurationsdaten aus.