如何在MS统一中注册犀牛存根?

时间:2012-10-21 14:27:55

标签: c# unit-testing unity-container rhino-mocks

我正在使用Ms unity containerrhino mock来创建存根。

我尝试创建存根并在我的统一容器中注册它

IUnityContainer container = ContainerManager.GetDefaultContainer;

var loggerStub = MockRepository.GenerateStub<ILogger>();

container.RegisterType<ILogger, loggerStub>();

但是,只能注册班级类型。

如何在我的单元测试中注册存根(如记录器存根)?

1 个答案:

答案 0 :(得分:1)

您还可以使用the RegisterInstance method配置Unity容器以将给定类型解析为指定的实例。

因此,在您的注册码中,您需要将最后一行更改为:

container.RegisterInstance(typeof(ILogger), loggerStub);

但是,我发现你需要在你的unis测试中使用IoC容器有点奇怪。

您应该能够手动创建受测试系统的实例。

根据我的经验,我在以下情况下使用IoC进行测试:

  • 当我需要测试容器配置本身时(例如:看到可以成功解析特定类型)
  • 当我有这么多依赖项时,手动指定它们并不容易(在这种情况下,问题实际上是设计不好或测试隔离不佳)
  • 当我需要执行集成测试(而不是单元测试)时

更新

我看到了你的评论,我可以立即想到两个不在单元测试中使用注入的原因:

  • 你必须做更多的工作而不是必要的。在应用程序中,您设置了一个容器,它可以解决所有问题。在测试的情况下,您需要设置许多具有不同存根/模拟的容器配置(取决于您在每个单元测试中测试的内容)。我认为手动为测试中的类提供任何依赖项更容易。
  • 在某些测试中,您可能忘记为所有依赖项设置存根,并且您的单元测试可能最终访问外部资源(例如,数据库,远程服务)。