Unit testing 温莎和犀牛的自动模拟容器

Unit testing 温莎和犀牛的自动模拟容器,unit-testing,castle-windsor,rhino,rhino-commons,automocking,Unit Testing,Castle Windsor,Rhino,Rhino Commons,Automocking,我想和温莎一起做自动模拟,这样我可以做类似的事情 _controller = _autoMockingContainer.Create<MyControllerWithLoadsOfDepdencies>(); \u controller=\u autoMockingContainer.Create(); 图书馆中曾经有一个Windsor自动模拟容器。但这似乎不再得到维护,因此依赖项有点旧(它使用Castle Windsor 2,但我们需要引用2.5),因此导致dll地狱 有

我想和温莎一起做自动模拟,这样我可以做类似的事情

  _controller = _autoMockingContainer.Create<MyControllerWithLoadsOfDepdencies>();
\u controller=\u autoMockingContainer.Create();
图书馆中曾经有一个Windsor自动模拟容器。但这似乎不再得到维护,因此依赖项有点旧(它使用Castle Windsor 2,但我们需要引用2.5),因此导致dll地狱


有没有可行的替代方案?我试着从rhino测试中提取相关的类,但是我能处理的更多

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

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

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


更新:我最近展示了Windsor如何使用Rhino Mock实现自动模拟。

多亏@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));
        }
    }
公共抽象类TestBase
{
静态只读WindsorContainer\u mock WindsorContainer;
静态TestBase()
{
_mockWindsorContainer=新WindsorContainer();
_mockWindsorContainer.Register(Component.For());
}
受保护的静态T MockOf(),其中T:class
{
返回_mockWindsorContainer.Resolve();
}
受保护的静态T Create()
{
_mockWindsorContainer.Register(Component.For());
返回_mockWindsorContainer.Resolve();
}
}
公共类LazyComponentAutoMocker:ILazyComponentLoader
{
公共IRegistration加载(字符串键、类型服务、IDictionary参数)
{
返回Component.For(service).Instance(MockRepository.generateSub(service));
}
}

所以唯一的方法就是使用不同的模拟框架?不,我想你一定误解了我-你在使用温莎,对吗?这个例子展示了如何轻松地将任何模拟框架与Windsor一起使用,以允许自动注入模拟。写这篇博文的家伙觉得不值得花时间,但这篇博文很精彩,尽管它很简单。谢谢分享。所以唯一的方法就是使用不同的模拟框架?@Dan:一点也不,只是维护了Moq Contrib,不像Rhino的自动模拟容器。你也可以得到Rhino的代码并对其进行更新。是的,我确实尝试过升级Rihno的Castle。测试,它比我想象的更复杂。