我試圖使用城堡溫莎在我的自動化測試像這樣:在城堡溫莎3,覆蓋現有的組件註冊在一個單元測試
在每一個試驗:
- 的
Setup()
函數創建一個溫莎容器,登記每個組件的默認的實現 - 的
Test
功能訪問通過該方法IWindsorContainer.Resolve<T>
組分,並測試它們的行爲 - 的
TearDown()
函數處理溫莎容器(以及任何創建的組件)
例如,我可能有15個測試訪問組件,間接導致創建IMediaPlayerProxyFactory
組件。 SetUp
函數註冊了一個足夠好的實現IMediaPlayerProxyFactory
,所以我沒有在15個測試的每一箇中註冊這個維護的負擔。
不過,我現在寫一個測試Test_MediaPlayerProxyFactoryThrowsException
,優雅確認我的系統處理來自IMediaPlayerProxyFactory
組件的錯誤。在測試方法我已經建立了我特殊的模擬實現,現在我想將它注入框架:
this.WindsorContainer.Register(
Component.For<IMediaPlayerProxyFactory>()
.Instance(mockMediaPlayerProxyFactory)
);
但溫莎拋出一個Castle.MicroKernel.ComponentRegistrationException
,與消息「已經有該名稱的組成部分。 「
有沒有什麼辦法可以讓我的mockMediaPlayerProxyFactory
成爲IMediaPlayerProxyFactory
的默認實例,丟棄已經註冊的組件?
按照 documentation,城堡溫莎3允許登記覆蓋,但我只找到一個例子:
Container.Register(
Classes.FromThisAssembly()
.BasedOn<IEmptyService>()
.WithService.Base()
.ConfigureFor<EmptyServiceA>(c => c.IsDefault()));
ConfigureFor
是BasedOnDescriptor
類的方法。在我的情況下,我沒有使用FromDescriptor
或BasedOnDescriptor
。
命名和調用'.IsDefault'方法不需要真正的實現,除此之外,非常好! – bevacqua 2012-05-02 03:33:33
感謝您更新答案。 – 2013-12-16 09:23:08