使用Unity注册Mock对象时出现问题

时间:2011-09-16 02:26:31

标签: c# mocking unity-container

我有这样的命名注册:

Unity.Container.RegisterType<IScheduler, DailyScheduler>("Daily");

这是我在运行时解析接口的方法:

var Scheduler = Unity.Container.Resolve<IScheduler>("Daily");

我在我的Test类中覆盖此注册,如下所示:

  var schedulerMock = new Mock<IScheduler>();
  schedulerMock.SetupSet(s => s.IntervalString = It.IsAny<string>());
  Unity.Container.RegisterInstance("Daily", schedulerMock.Object);

问题是代码总是将IScheduler解析为DailyScheduler类型而不是模拟对象导致VerifyAll方法失败。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您使用的是Unity 2.0吗?它适用于我,至少使用容器的实例。我只是在LINQPad中试过它:

void Main()
{
    IUnityContainer container = new UnityContainer();

    container.RegisterType<IScheduler, DailyScheduler>("Daily");

    var schedulerMock = new Mock<IScheduler>();
    schedulerMock.Setup(x => x.Name).Returns("Mock!");
    container.RegisterInstance("Daily", schedulerMock.Object);

    IScheduler s = container.Resolve<IScheduler>("Daily");

    Console.WriteLine(s.Name);  // Prints "Mock!"
}

public interface IScheduler
{
    string Name { get; }
}

public class DailyScheduler: IScheduler
{
    public string Name { get { return "Daily!"; } }
}

假设Unity.Container是一个Singleton,在测试设置调用RegisterInstance后代码是否可能改变注册?