4

我想用温莎做自动模拟,这样我就可以做类似的事情

  _controller = _autoMockingContainer.Create<MyControllerWithLoadsOfDepdencies>();

Ayende 的 Rhino库中曾经有一个 Windsor 自动模拟容器。但这似乎不再维护,因此依赖关系有点旧(它使用的是 Castle Windsor 2,但我们需要引用 2.5),因此导致 dll 地狱。

有没有可行的替代方案?我尝试从 rhino 测试中提取相关类,但我可以处理的涉及更多。

4

3 回答 3

6

感谢@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));
        }
    }
于 2011-07-01T08:35:32.213 回答
5

在此处查看如何使用 NSubstitute 将 Windsor 制作成自动模拟容器。

ILazyComponentLoader通过注册一个使用 Rhino Mocks 来生成模拟实例而不是 NSubstitute的函数,用你想要的功能扩展 Windsor 应该是相当容易的。

更新:我最近在我的博客上展示了 Windsor 如何使用 Rhino 模拟实现自动模拟。

于 2011-06-24T19:50:16.143 回答
1

Moq Contrib有一个用于 Windsor + Moq 的自动模拟容器。它似乎是最新的。显然,您必须使用 Moq 而不是 Rhino.Mocks。

于 2011-06-24T14:55:51.243 回答