2016-07-05 81 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