Проблема с регистрацией фиктивных объектов в Unity - PullRequest
2 голосов
/ 16 сентября 2011

У меня есть именованная регистрация, подобная этой:

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

Вот как я разрешаю интерфейсы во время выполнения:

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

Я отменяю эту регистрацию в моем тестовом классе следующим образом:

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

Проблема в том, что код всегда разрешает IScheduler в тип DailyScheduler, а не в фиктивный объект, что приводит к сбою метода VerifyAll. Я что-то упустил?

1 Ответ

0 голосов
/ 16 сентября 2011

Используете ли вы 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 является синглтоном, возможно ли, что код изменяет регистрацию после вызова тестовой установки RegisterInstance?

...