我有这样的命名注册:
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方法失败。我错过了什么吗?
答案 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后代码是否可能改变注册?