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

问题描述 投票:1回答:1

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

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

IUnityContainer container = ContainerManager.GetDefaultContainer;

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

container.RegisterType<ILogger, loggerStub>();

但是,只能注册类类型。

如何注册存根(如记录器存根)以运行我的单元测试?

c# unit-testing unity-container rhino-mocks
1个回答
1
投票

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

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

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

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

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

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

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

Update

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

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