依赖注入 – NUnit集成测试和依赖注入

前端之家收集整理的这篇文章主要介绍了依赖注入 – NUnit集成测试和依赖注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在使用Castle Windsor版本2.1作为我的容器,并希望使用注册的服务执行集成测试.

目前,我这样做是使用Common Service Locator来检索我的服务实例并对其执行我的集成测试:

var myService = ServiceLocator.Current.GetInstance<IMyService>();
// do stuff with myService

我理想的做法是将我的服务依赖项自动注入我的NUnit测试夹具. Spring似乎提供了this functionality,但我找不到类似于Castle的任何东西.

谁能指出我正确的方向?

编辑:

我相信每个人都有(有效)的观点,这是否是一个好主意;让我们假设这是在这种情况下……有谁能告诉我如何使用温莎来实现这一目标?

解决方法

如果你从Spring / Spring.net来到温莎,你会发现这些项目有很多不同意的事情.这是其中之一.作为温莎的倡导者,我永远不会使用像Spring的AbstractDependencyInjectionSpringContextTests这样的东西.将事情注入测试似乎是错误的,但话说回来,就像我说的那样,我有偏见.

如果要进行集成测试,只需创建一个新的容器实例,添加所需的任何组件,然后运行您想要测试的任何内容,例如:

[Test]
public void TestComponentThatDependsOnA() {
  var container = new WindsorContainer();
  container.Register(Component.For<MyComponentA>());
  container.Register(Component.For<ComponentThatDependsOnA>());
  var a = container.Resolve<ComponentThatDependsOnA>();
  var result = a.DoSomething();
  Assert.AreEqual("ok",result);
}

如果你的注册整齐地包装在installers(你应该),你可以在测试中重复使用它们,使测试更简洁.

如果您有XML配置,则可以使用Configuration.FromXmlFile()轻松加载它.

此外,这里不需要使用Common Service Locator.

对于某些集成测试也很有用的是auto-mocking container,它会自动模拟服务(当然,除非你用具体的覆盖它们).

猜你在找的设计模式相关文章