2016-07-05 84 views
1

如何爲WcfOperationLifestyle容器單元測試注射?我在我的MyBootstrapper類WcfOperationLifestyle簡單注射器單元測試

container = new Container();  
container.Options.DefaultScopedLifestyle = new WcfOperationLifestyle(); 
... 
container.Register<IService, Service>(Lifestyle.Scoped); 
根據 http://simpleinjector.readthedocs.io/en/latest/wcfintegration.html

,但是當我的單元測試

var actual = MyBootstrapper.Container.GetInstance<IService>(); 

我得到

的IService被註冊爲 'WCF操作' 的生活方式,但實例在WCF操作的範圍之外被請求。 這是完全合理的,因爲測試運行不是WCF環境。

回答

2

DefaultScopedLifestyle屬性的整個ide使得更容易在不同的上下文中重用配置,例如單元測試。

你應該做的是提供有限的生活方式到CreateContainer方法。通過這種方式,WCF啓動代碼和測試代碼都可以使用自己的有限生活方式。

對於測試,最方便的生活方式可能是LifetimeScopeLifestyle。您可以使用container.BeginLifetimeScope()的使用塊將呼叫包裝爲GetInstance。

請注意Verify方法在內部啓動它自己的範圍,並且此方法將爲您做很多測試。它檢查是否可以構建所有註冊,並檢查真正難以發現的常見配置錯誤。

+0

我在另一個單元測試中使用Verify方法。當前的單元測試用於檢查裝飾注入是否在特定環境下正確完成(例如UAT中的假實現,產品中的真實實現等)。謝謝,我會按照你的建議。 – kord