Wie kann ich tun, Dependency Injection in einem Testprojekt (TFS 2008) mit Schloss
-
01-07-2019 - |
Frage
Ich verwende Schloss Windsor für Dependency Injection in meinem Testprojekt. Ich versuche, eine Instanz eines meiner ‚Repository‘ Klassen zu erstellen. „Es funktioniert auf meinem Rechner“, aber wenn ich ein Nightly Build in TFS laufen, meine Tests sind nicht in der Lage die Klassen zu laden.
private static readonly WindsorContainer _container = new WindsorContainer(new XmlInterpreter());
public void MyTestInitialize()
{
var testRepository = (IBogusRepository)_container[typeof(IBogusRepository)];
}
XML-Konfiguration:
<castle>
<components>
<component id="primaryBogusRepository" type="Example2008.Repository.LALALALALA, Example2008.Repository" service="Example2008.Domain.Repository.IBogusRepository, Example2008.Domain" />
<component id="primaryProductRepository" type="Example2008.Repository.ProductRepository, Example2008.Repository" service="Example2008.Domain.Repository.IProductRepository, Example2008.Domain" />
</components>
</castle>
Wenn ich eine neue Build-Warteschlange es produziert die folgende Meldung:
Kann nicht Instanz der Klasse erstellen Example2008.Test.ActiveProductRepositoryTest. Error: System.Configuration.ConfigurationException: Der Typname Example2008.Repository.LALALALALA, Example2008.Repository konnte nicht sein befindet.
Castle.Windsor.Installer.DefaultComponentInstaller.ObtainType (String Modellname) Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents (IConfiguration [] Konfigurationen, IWindsorContainer Container) Castle.Windsor.Installer.DefaultComponentInstaller.SetUp (IWindsorContainer Behälter, IConfigurationStore store) Castle.Windsor.WindsorContainer.RunInstaller () Castle.Windsor.WindsorContainer..ctor (IConfigurationInterpreter Dolmetscher) Example2008.Test.ActiveProductRepositoryTest..cctor () in d: \ Code_Temp \ Beispiel Projekt Nightly \ Sources \ Example2008.Test \ ProductRepositoryTest.cs: Zeile 19
Von dieser Nachricht scheint es, dass meine Konfiguration korrekt ist (es kann sehen, dass ich die konkrete Klasse ‚lalalalala‘ instanziiert will, so dass die XML-Konfiguration hat offensichtlich rot gewesen richtig)
Ich glaube, ich habe meine Abhängigkeiten korrekt als gut eingerichtet (weil es vor Ort funktioniert, auch wenn ich die Lösung reinigen und neu erstellen).
Alle Gedanken?
(mit VS2008, TFS 2008.Net 3.5, Schloss 1,03, übrigens)
Lösung
Das ist ... interessant. Ich fand diesem Blog-Post das kann Ihr Problem helfen. Es sieht aus wie MSTest verwendet, die als Arbeitsverzeichnis, die gelinde gesagt ärgerlich. Der Blog-Eintrag zeigt, wie das Verzeichnis zu ändern, so dass Sie konsistente Ergebnisse haben können. Ich würde einige Googeln auch tun, um herauszufinden, ob eine elegantere Lösung besteht.
Andere Tipps
Es klingt wie die Anordnung, die die Repository-Implementierungen fehlen aus dem bin-Verzeichnis (oder wo auch immer Ihre Ausführung Verzeichnis ist für den Build) hält.
Ich würde zuerst prüfen, ob die Anordnung in der Ausführung Verzeichnis Build-Servers vorhanden ist.
Wenn es nicht vorhanden ist, dann würde ich überprüft die Version der Assembly, um sicherzustellen, ist der richtige, das heißt hat die Repository-Implementierung auf sie im gleichen Namensraum etc.
Es kann sein, dass Ihr Build-Server ausgeführt wird / Bau der Objekte irgendwo anders als in dem VS ausführt / Gebäude.