当前位置 : 主页 > 手机开发 > 其它 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
我目前正在使用Castle Windsor版本2.1作为我的容器,并希望使用注册的服务执行集成测试. 目前,我这样做是使用Common Service Locator来检索我的服务实例并对其执行我的集成测试: var myService
我目前正在使用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,它会自动模拟服务(当然,除非你用具体的覆盖它们).

网友评论