我想与温莎进行自动锁定,以便我可以做类似
的事情 _controller = _autoMockingContainer.Create<MyControllerWithLoadsOfDepdencies>();
Ayende's Rhino个库中曾经有一个Windsor自动模拟容器。但这似乎不再维持,所以依赖有点旧(它使用Castle Windsor 2,但我们需要引用2.5),因此导致dll地狱。
有没有可行的替代方案?我尝试从rhino测试中提取出相关的类,但是我可以处理的更多内容。
答案 0 :(得分: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));
}
}
答案 1 :(得分:5)
了解如何使用NSubstitute here将Windsor制作成自动模拟容器。
通过注册使用Rhino Mocks生成模拟实例而非NSubstitute的ILazyComponentLoader
来扩展Windsor应该相当容易。
更新:我最近展示了Windsor如何使用Rhino模拟on my blog实现自动模拟。
答案 2 :(得分:1)
Moq Contrib有一个用于Windsor + Moq的自动锁定容器。它似乎是最新的。显然,你必须使用Moq而不是Rhino.Mocks。