Question

J'utilise Castle Windsor pour l'injection de dépendance dans mon projet test. J'essaie de créer une instance de l'une de mes classes 'Repository'. "Cela fonctionne bien sur ma machine", mais lorsque je lance une construction nocturne dans TFS, mes tests ne sont pas en mesure de charger lesdites classes.

private static readonly WindsorContainer _container = new WindsorContainer(new XmlInterpreter());


    public void MyTestInitialize()
    {
        var testRepository = (IBogusRepository)_container[typeof(IBogusRepository)];

    }

configuration xml:

<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>

Quand je mets en file d'attente une nouvelle construction, elle est produite. le message suivant:

  

Impossible de créer une instance de classe   Example2008.Test.ActiveProductRepositoryTest. Erreur:   System.Configuration.ConfigurationException:   Le nom du type   Example2008.Repository.LALALALALA,   Example2008.Repository n'a pas pu être   situé.

     

Castle.Windsor.Installer.DefaultComponentInstaller.ObtainType (String   typeName)   Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents (IConfiguration []   configurations, IWindsorContainer   récipient)   Castle.Windsor.Installer.DefaultComponentInstaller.SetUp (IWindsorContainer   conteneur, magasin IConfigurationStore)   Castle.Windsor.WindsorContainer.RunInstaller ()   Castle.Windsor.WindsorContainer..ctor (IConfigurationInterpreter   interprète)   Example2008.Test.ActiveProductRepositoryTest..cctor ()   dans d: \ Code_Temp \ Example Project   Nightly \ Sources \ Example2008.Test \ ProductRepositoryTest.cs:   ligne 19

D'après ce message, il semble que ma configuration soit correcte (il est visible que je souhaite instancier la classe concrète 'LALALALALA', la configuration xml a donc été correctement affichée en rouge)

Je pense que mes dépendances sont également correctement configurées (car cela fonctionne localement, même si je nettoie la solution et le reconstruit).

Avez-vous des idées?

(en utilisant VS2008, TFS 2008.Net 3.5, Castle 1.03, au fait)

Était-ce utile?

La solution

C'est ... intéressant. J'ai trouvé cet article de blog cela peut aider votre problème. Il semble que MSTest utilise cela comme répertoire de travail, ce qui est pour le moins gênant. Le billet de blog montre comment changer de répertoire afin d’obtenir des résultats cohérents. Je ferais aussi des recherches sur Google pour savoir s’il existe une solution plus élégante.

Autres conseils

Il semble que l'assemblage contenant les implémentations du référentiel soit absent du répertoire bin (ou de l'emplacement où votre répertoire d'exécution est destiné à la construction).

Je voudrais d’abord vérifier si l’assemblage existe dans le répertoire d’exécution du serveur de compilation.

Si elle existe, je vérifierais que la version de l’assemblage est la bonne, c’est-à-dire qu’elle dispose de l’implémentation du référentiel dans le même espace de noms, etc.

Il se peut que votre serveur de build exécute / crée les objets ailleurs que là où VS est en train de s’exécuter / construire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top