Авто насмешливый контейнер для Виндзора и Носорога - PullRequest
4 голосов
/ 24 июня 2011

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

  _controller = _autoMockingContainer.Create<MyControllerWithLoadsOfDepdencies>();

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

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

Ответы [ 3 ]

6 голосов
/ 01 июля 2011

Благодаря ссылке @ 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));
        }
    }
5 голосов
/ 24 июня 2011

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

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

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

1 голос
/ 24 июня 2011

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

...