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; }
Then you can create an auto-mocking kernel in unit test as follows:
[Test] public void Test() { var kernel = new AutoMockingKernel(new RhinoAutoMockProvider()); ... etc }
cbp
source share