WcfOperationLifestyle 简单注入器单元测试
WcfOperationLifestyle simple injector unit test
如何对 WcfOperationLifestyle 容器的注入进行单元测试?我的 MyBootstrapper class
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 Operation' 生活方式,但实例是在 WCF 操作的上下文之外请求的。
这完全有道理,因为测试 运行 不是 WCF 环境。
DefaultScopedLifestyle 属性 的整个 ide 使得在不同上下文中重用配置变得更加容易,例如单元测试。
您应该做的是将作用域生活方式提供给 CreateContainer
方法。这样 WCF 启动代码和测试代码都可以使用它们自己的作用域生活方式。
对于测试来说,最方便的生活方式可能是LifetimeScopeLifestyle。您可以使用 container.BeginLifetimeScope()
.
的 using 块包装对 GetInstance 的调用
请注意,Verify
方法在内部启动了它自己的作用域,此方法将为您做很多测试。它检查是否所有的注册都可以构建,并检查自己很难发现的常见配置错误。
如何对 WcfOperationLifestyle 容器的注入进行单元测试?我的 MyBootstrapper class
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 Operation' 生活方式,但实例是在 WCF 操作的上下文之外请求的。 这完全有道理,因为测试 运行 不是 WCF 环境。
DefaultScopedLifestyle 属性 的整个 ide 使得在不同上下文中重用配置变得更加容易,例如单元测试。
您应该做的是将作用域生活方式提供给 CreateContainer
方法。这样 WCF 启动代码和测试代码都可以使用它们自己的作用域生活方式。
对于测试来说,最方便的生活方式可能是LifetimeScopeLifestyle。您可以使用 container.BeginLifetimeScope()
.
请注意,Verify
方法在内部启动了它自己的作用域,此方法将为您做很多测试。它检查是否所有的注册都可以构建,并检查自己很难发现的常见配置错误。