加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:56:13 所属栏目:百科 来源:网络整理
导读:我目前正在使用Castle Windsor版本2.1作为我的容器,并希望使用注册的服务执行集成测试. 目前,我这样做是使用Common Service Locator来检索我的服务实例并对其执行我的集成测试: var myService = ServiceLocator.Current.GetInstanceIMyService();// do stuf
我目前正在使用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,它会自动模拟服务(当然,除非你用具体的覆盖它们).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读