Авто насмешливый контейнер для Виндзора и Рихно

Я хочу сделать автозамену с Виндзором, чтобы я мог сделать что-то вроде

  _controller = _autoMockingContainer.Create<MyControllerWithLoadsOfDepdencies>();

Раньше в библиотеках Айенде Rhino был контейнер для авто-насмешки Виндора. Но это, похоже, больше не поддерживается, поэтому зависимости немного устарели (используется Castle Windsor 2, но нам нужно 2.5, чтобы ссылаться на них), что вызывает ад dll.

Есть ли жизнеспособные альтернативы? Я пытался вытащить соответствующие классы из тестирования носорога, но это гораздо сложнее, чем я могу справиться.

3 ответа

Решение

Благодаря ссылке @mookid8000 и помощи коллеги, я создал это...... что, кажется, делает свое дело.

 public abstract class TestBase
    {
        static readonly WindsorContainer _mockWindsorContainer;

        static TestBase()
        {
            _mockWindsorContainer = new WindsorContainer();
            _mockWindsorContainer.Register(Component.For<LazyComponentAutoMocker>());
        }

        protected static T MockOf<T>() where T : class
        {
            return _mockWindsorContainer.Resolve<T>();
        }

        protected static T Create<T>()
        {
            _mockWindsorContainer.Register(Component.For<T>());
            return _mockWindsorContainer.Resolve<T>();
        }

    }

    public class LazyComponentAutoMocker : ILazyComponentLoader
    {
        public IRegistration Load(string key, Type service, IDictionary arguments)
        {
            return Component.For(service).Instance(MockRepository.GenerateStub(service));
        }
    }

Посмотрите, как Windsor может быть превращен в контейнер для автоматического перемещения с помощью NSubstitute, здесь.

Это должно быть довольно легко расширить Windsor с желаемой функциональностью, зарегистрировав ILazyComponentLoader который использует Rhino Mocks для генерации фиктивных экземпляров вместо NSubstitute.

Обновление: я недавно показал, как Виндзор может реализовывать автоматическое моделирование с помощью насмешек Rhino в моем блоге.

У Moq Contrib есть контейнер для автоподстройки для Windsor + Moq. Вроде бы в курсе. Очевидно, вам придется использовать Moq вместо Rhino.Mocks.

Другие вопросы по тегам