1

我正在使用 Msunity containerrhino mock创建存根。

我尝试创建存根并将其注册到我的统一容器中

IUnityContainer container = ContainerManager.GetDefaultContainer;

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

container.RegisterType<ILogger, loggerStub>();

但是,只能注册类类型。

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

4

1 回答 1

1

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

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

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

但是,我觉得在 unis 测试中需要使用 IoC 容器有点奇怪。

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

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

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

更新

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

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