Car face: Rhino Mocks and NInject

Does anyone have an implementation lying around an auto container using Rhino Mocks and NInject?

+6
ninject rhino-mocks
source share
2 answers

OK. I built it myself using Moq integration as a starting point. It is very simple. You need these 3 classes:

public class AutoMockingKernel : StandardKernel { private readonly IMockProvider _mockProvider; public void Reset() { Components.Get<ICache>().Clear(); } protected override bool HandleMissingBinding(Type service) { var isSelfBindable = TypeIsSelfBindable(service); var binding = new Binding(service) { ProviderCallback = isSelfBindable ? StandardProvider.GetCreationCallback(service) : _mockProvider.GetCreationCallback(), IsImplicit = true }; if (!isSelfBindable) binding.ScopeCallback = ctx => null; AddBinding(binding); return true; } public AutoMockingKernel(IMockProvider mockProvider, INinjectSettings settings, params INinjectModule[] modules) : base(settings, modules) { _mockProvider = mockProvider; } public AutoMockingKernel(IMockProvider mockProvider, params INinjectModule[] modules) : base(modules) { _mockProvider = mockProvider; } } internal class RhinoMockProvider : IProvider { public Type Type { get; private set; } /// <summary> /// Initializes a new instance of the <see cref="RhinoMockProvider"/> class. /// </summary> public RhinoMockProvider(Type type) { Type = type; } public object Create(IContext context) { return MockRepository.GenerateMock(Type, Type.EmptyTypes); } } public class RhinoAutoMockProvider : IMockProvider { public Func<IContext, IProvider> GetCreationCallback() { return ctx => new RhinoMockProvider(ctx.Request.Service); } } 

Then you can create an auto-mocking kernel in unit test as follows:

 [Test] public void Test() { var kernel = new AutoMockingKernel(new RhinoAutoMockProvider()); ... etc } 
+6
source share
+5
source share

All Articles