Ich bin dabei, einige unserer komplexen Erstellungscode zu konvertieren, um einen IoC-Container, Autofac, zu verwenden, und weil ich ein großer Gläubiger in TDD bin, schreibe ich Komponententests für die Modulkonfiguration.Wie testet man diese IoC-Registrierung mit benannten Komponenten? (Autofac)
Der Großteil der Funktionalität ist sehr einfach zu testen, z.B.
var obj = container.Resolve<IThing>();
Assert.IsInstanceOfType(obj, typeof(ThingImplementer));
Aber wir haben eine Reihe von Fällen, in denen wir mehrere Implementierer von der gleichen Schnittstelle und verschiedene Implementierer haben auf unterschiedliche konkrete Klassen weitergegeben werden. Ich habe das gelöst, indem ich die benannte Registrierung z.
builder.RegisterType<ThingImplementer>().Named<IThing>("Implementer1");
builder.RegisterType<OtherImplementer>().Named<IThing>("Implementer2");
builder.Register(c => new Foo(c.ResolveNamed<IThing>("Implementer1"))).As<IFoo>();
Was ich kann nicht herausfinden ist eine einfache Möglichkeit, ein Gerät zu testen, um sicherzustellen, dass Foo bekommen ThingImplementer und nicht OtherImplementer zu schreiben. Ich frage mich, ob es die Mühe wert ist, wir haben Integrationstests auf hoher Ebene, die das abdecken, aber sie geben nicht die Dokumentation oder den Refactoring-Nutzen, die Komponententests tun.
Würden Sie einen Komponententest dafür schreiben? Wenn ja, wie?