Wir verwenden StructureMap in einem neuen Softwareentwicklungsprojekt. Eines der Teammitglieder hat einen Komponententest implementiert, der im Wesentlichen die StructureMap- Containerkonfiguration testet . Dies geschieht durch Folgendes:
- Zählt die Anzahl der Instanzen von Assemblys, die für Klassen in unserem Anwendungsnamespace konfiguriert sind.
- Definiert erwartete Instanzen auf Klassenebene
- Gibt an, dass die erwarteten Instanzen mit der Gesamtzahl der gefundenen Instanzen übereinstimmen.
- Gibt an, dass die erwarteten Instanzen mit den im Test definierten übereinstimmen
Ein Beispiel dafür ist;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
Wir haben auch "Unit-Tests" für die folgende Klasse;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
In diesen Tests verspotten wir IEnvironmentRepository, würden es also nicht wie im Live-System aus dem Container injizieren.
Ein Kollege ignorierte den Komponententest in der Strukturkartenkonfiguration mit einem Kommentar in der Zeile "Komponententest testet nur die eigene Konfiguration". Dies war offensichtlich der Zweck des Tests und ist meiner Meinung nach vollkommen gültig. Ich habe den Typen, der den Test ignoriert hat, gebeten, die Strukturzuordnungskonfiguration für IEnvironmentRepository
(wobei der Test immer noch ignoriert wird) zu entfernen und die vollständige Unit-Test-Suite auszuführen. Alle haben bestanden. Wir haben dann die Anwendung ausgeführt und sie ist umgefallen, weil die Containerkonfiguration jetzt ungültig war. Meiner Meinung nach hat dies den Wert des Tests bewiesen, mein Kollege war immer noch anderer Meinung. Er erklärte lediglich, dass wir die Konfiguration nicht testen sollten, aber ich denke, dass dies im Rahmen eines Komponententests liegt.
Also eine Reihe von Fragen;
- Ist es ein gültiger Komponententest? Wir testen die Konfiguration unseres Containers, nicht dass die Strukturkarte funktioniert (aber ich kann die Überlappung sehen).
- Wenn nicht, wie können Sie die Konfiguration überprüfen, ohne sie zu testen? Wie können Sie verhindern, dass jemand versehentlich eine erforderliche Codezeile löscht und eincheckt?
- Sollte der
MyClass
Unit-Test die Instanz vonIEnvironmentRepository
aus dem Container auflösen und übergeben?