Авто-макет контейнера: носорог издевается и Нинжект
Есть ли у кого-нибудь реализация, лежащая вокруг контейнера auto-mock, использующего Rhino Mocks и NInject?
2 ответа:
Хорошо, я сам построил его, используя интеграцию Moq в качестве отправной точки. Это очень просто. Вам нужны эти 3 класса:
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); } }
Затем вы можете создать ядро с автоматической насмешкой в модульном тесте следующим образом:
[Test] public void Test() { var kernel = new AutoMockingKernel(new RhinoAutoMockProvider()); ... etc }
Имеется расширение интеграции RhinoMocks .