2009-03-10 12 views
1

Ich habe eine Bibliothek, für die ich Komponententests schreibe. Die Bibliothek wird von zwei Anwendungen verwendet: Die eine ist eine Windows-Dienst, die andere eine Befehlszeilenanwendung, die einige Lese- Schreibvorgänge der Registrierung ausführt. Jeder hat eine etwas andere App.config-Datei, die beim Start von der Bibliothek geladen wird. Zum Beispiel:Wie konfiguriere ich meine Einstellungsdatei für die Arbeit mit Komponententests?

public RetentionService() 
    { 
     SettingHive = new Hive(); 
     TimingService = new RetentionTimingService(SettingHive); 

     AppSettingsReader asr = new AppSettingsReader(); 
     object appsListObj = asr.GetValue(@"blocking-process-list", Type.GetType(@"System.String")); 
     string appsList = appsListObj.ToString(); 
     _BlockingAppNames = RetentionService.ListFromList(appsList); 

     string targetList = asr.GetValue(@"target-files", Type.GetType(@"System.String")).ToString(); 
     _TargetLogs = RetentionService.ListFromList(targetList); 
    } 

Wenn ich versuche, diese Bibliothek von einem Unit-Test zu verwenden, um es zu laden schlägt fehl, da die Anwendung die Bibliothek geladen (vermutlich nunit) keine * .exe.config Datei mit dem entsprechenden hat Schlüssel.

Was ist eine bessere Möglichkeit, dies zu tun? Ich möchte, dass die Bibliothek die Einstellungen aus der * .exe.config-Anwendung jeder Anwendung in der Produktion lädt, aber von einem dritten Speicherort, wenn ein Komponententest ausgeführt wird.

Antwort

2

Wenn Ihre Komponententests entwickelt wurden, um den Code zu testen, dann hängen Sie nicht von der Konfigurationsdatei ab. Extrahieren Sie Ihre Abhängigkeit aus Ihren Klassen und verwenden Sie die Abhängigkeitsinjektion, um die Daten zu injizieren. Auf diese Weise können Sie Ihre Konfigurationsklasse stubben.

Wenn Sie eigentlich nur Ihre Konfigurationsdatei testen, sollten Sie in der Lage sein, es explizit mit ConfigurationManager zu laden, obwohl ich Unit-Test-Konfigurationsdaten nicht vorschlagen würde. Es ist ein besserer Kandidat für Rauchversuche.

1

Die beste Möglichkeit besteht darin, den Zugriff auf die Konfigurationsdaten innerhalb einer Proxy-Klasse zu ermöglichen, die Sie bei Bedarf zur Laufzeit umleiten können - verwenden Sie die integrierten APIs nicht direkt.

2

Alternativ fügen Sie einfach eine app.config-Datei zu Ihrem Unit-Testprojekt hinzu, das die relevanten Informationen enthält.

Verwandte Themen