Ich habe diese Art von Setup in meiner Visual Studio 2008-Lösung: Ein WCF-Dienstprojekt (WCFService), die Bibliothek (Lib1, die einige Konfigurationseinträge in app.config-Datei benötigt) verwendet. Ich habe ein Unit-Test-Projekt (MSTest), das Tests zu Lib1 enthält. Um diese Tests durchzuführen, benötige ich eine Konfigurationsdatei im Testprojekt. Gibt es eine Möglichkeit, es automatisch von WCFService zu laden, so dass ich die Konfigurationseinträge nicht an zwei Stellen ändern muss?Testprojekt und Konfigurationsdatei
Antwort
Wenn Ihre Bibliothek Eigenschaften direkt aus der Datei app.config im gesamten Code liest, wird Ihr Code spröde und schwer zu testen sein. Es wäre besser, eine Klasse zu haben, die dafür verantwortlich ist, die Konfiguration zu lesen und Ihre Konfigurationswerte in einer stark typisierten Weise zu speichern. Lassen Sie diese Klasse entweder eine Schnittstelle implementieren, die die Eigenschaften aus der Konfiguration definiert, oder machen Sie die Eigenschaften virtuell. Dann können Sie diese Klasse ausspotten (indem Sie ein Framework wie RhinoMocks verwenden oder eine falsche Klasse manuell erstellen, die auch die Schnittstelle implementiert). Inject eine Instanz der Klasse in jede Klasse, die Zugriff auf die Konfigurationswerte über den Konstruktor benötigt. Richten Sie es so ein, dass, wenn der injizierte Wert null ist, eine Instanz der richtigen Klasse erstellt wird.
public interface IMyConfig
{
string MyProperty { get; }
int MyIntProperty { get; }
}
public class MyConfig : IMyConfig
{
public string MyProperty
{
get { ...lazy load from the actual config... }
}
public int MyIntProperty
{
get { ... }
}
}
public class MyLibClass
{
private IMyConfig config;
public MyLibClass() : this(null) {}
public MyLibClass(IMyConfig config)
{
this.config = config ?? new MyConfig();
}
public void MyMethod()
{
string property = this.config.MyProperty;
...
}
}
-Test
public void TestMethod()
{
IMyConfig config = MockRepository.GenerateMock<IMyConfig>();
config.Expect(c => c.MyProperty).Return("stringValue");
var cls = new MyLib(config);
cls.MyMethod();
config.VerifyAllExpectations();
}
- 1. Kompilierungsfehler: Cocoapods Xcode Testprojekt Kompilierungsfehler, wie Testprojekt sauber zu entfernen
- 2. SCons Konfigurationsdatei und Standardwerte
- 3. IntelliTest wird kein Testprojekt erstellen
- 4. Jasmine in einem separaten Testprojekt
- 5. Bindungsumleitung funktioniert nicht im Testprojekt
- 6. Konfigurationsdatei
- 7. Zeichensatz-Server und Konfigurationsdatei mysql
- 8. Ant und XML-Konfigurationsdatei Parsing
- 9. Java Servlet - Logger und Konfigurationsdatei
- 10. Unterschied zwischen C# -Testprojekt und C# -Klassenbibliothek Projekt
- 11. Microsoft Fakes Testprojekt konnte Assembly nicht laden
- 12. Integration von Visual Studio-Testprojekt mit Geschwindigkeitsregelung
- 13. Datei "XXX-Swift.h" im Testprojekt nicht gefunden
- 14. Kann das Testprojekt in VS2008 nicht finden
- 15. kann nicht freigegeben Projekt Visual Studio Testprojekt
- 16. OMNeT ++ Konfigurationsdatei
- 17. GitKraken Konfigurationsdatei
- 18. Flash-Konfigurationsdatei
- 19. ghci Konfigurationsdatei
- 20. Entfernen mit Proguard und optimierten Android-Konfigurationsdatei
- 21. Schnelle und schmutzige Benutzeroberfläche für App-Konfigurationsdatei?
- 22. SSH-Konfigurationsdatei Setup mit Wildcards und DRY
- 23. Git - Entfernen und Ausschließen der Konfigurationsdatei
- 24. Abrufen und Rang in Python-Konfigurationsdatei-Typ?
- 25. CMake und CPack. Installationspfad in der Konfigurationsdatei
- 26. WiX Suchen und Ersetzen in einer Konfigurationsdatei
- 27. Update-Konfigurationsdatei mit Ant
- 28. Checkin CruiseControl.net Konfigurationsdatei
- 29. Symfony2 Benutzerdefinierte Konfigurationsdatei
- 30. PROGRAMMISCHES Laden der Konfigurationsdatei
Sie können alle Konfigurationseinträge in einer Datei (oder mehr) sammeln und verwenden Sie die SectionInformation.ConfigSource Eigenschaft auf diese Datei verweisen sowohl von dem WCF-Service-Projekt und das Testprojekt . – charisk