Sto tentando di utilizzare il castello di Windsor nel mio test automatizzati in questo modo:Nel Castello di Windsor 3, sovrascrivere una registrazione componente esistente in una prova di unità
Su ogni prova:
- La funzione
Setup()
crea un contenitore Windsor, registrando implementazione di default di ogni componente - la
Test
funzione di accesso componente tramite il metodoIWindsorContainer.Resolve<T>
, e verifica il loro comportamento - il
TearDown()
dispone di funzione del contenitore Windsor (ed eventuali componenti creati)
Ad esempio, potrebbero avere 15 test che accede componenti che indirettamente risultati nella creazione di un componente IMediaPlayerProxyFactory
. La funzione SetUp
registra un'implementazione sufficientemente buona IMediaPlayerProxyFactory
, pertanto non ho l'onere di eseguire la registrazione in ciascuno dei 15 test.
Tuttavia, ora sto scrivendo un test Test_MediaPlayerProxyFactoryThrowsException
, confermando che il mio sistema gestisce elegantemente un errore dal componente IMediaPlayerProxyFactory
. Nel metodo di prova ho creato la mia speciale implementazione mock, e ora voglio iniettarla nel quadro:
this.WindsorContainer.Register(
Component.For<IMediaPlayerProxyFactory>()
.Instance(mockMediaPlayerProxyFactory)
);
Ma Windsor lancia un Castle.MicroKernel.ComponentRegistrationException
, con il messaggio "C'è già un componente con quel nome. "
Esiste un modo per rendere il mio mockMediaPlayerProxyFactory
l'istanza predefinita per lo IMediaPlayerProxyFactory
, scartando il componente già registrato?
Secondo il documentation, Castello di Windsor 3 consente per le sostituzioni di registrazione, ma sono riuscito a trovare solo un esempio:
Container.Register(
Classes.FromThisAssembly()
.BasedOn<IEmptyService>()
.WithService.Base()
.ConfigureFor<EmptyServiceA>(c => c.IsDefault()));
ConfigureFor
è un metodo della classe BasedOnDescriptor
. Nel mio caso non sto usando il FromDescriptor
o BasedOnDescriptor
.
nome e invocazione del metodo '.IsDefault' non sono necessari per l'implementazione reale, a parte questo, molto bello! – bevacqua
Grazie per aver aggiornato la risposta. –