有沒有人使用Rhino Mocks和NInject來實現自動模擬容器?自動模擬容器:Rhino Mocks和NInject
6
A
回答
6
好的我自己用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
}
+0
作爲一個感興趣的問題,您如何在[拆解]中管理重置觸發? – 2009-12-01 09:41:11
+0
我在拆解過程中調用Reset的所有測試裝置都使用基類。我也使用一個靜態內核容器。絕對不是理想的,但我發現這種東西永遠不會。 – cbp 2009-12-02 00:43:15
5
相關問題
- 1. Rhino Mocks部分模擬
- 2. Rhino-Mocks如何模擬?
- 3. Rhino Mocks示例如何模擬屬性
- 4. 如何使用Rhino Mocks模擬IDbSet
- 5. 使用Rhino Mocks創建ClientScriptManager的模擬
- 6. Rhino Mocks和PRISM EventAggregator
- 7. Unity Nunit和Rhino Mocks
- 8. 你如何從Rhino Mocks的嚴格模擬中舉辦活動?
- 9. 如何使用Rhino Mocks模擬PartialMock上的屬性設置器
- 10. Rhino Commons和Rhino Mocks參考文檔?
- 11. Rhino Mocks的Arg.Property
- 12. Rhino Mocks,VerifyAllExpectations
- 13. Rhino Mocks&Compact Framework
- 14. Rhino Mocks nant error
- 15. Rhino Mocks Restub函數
- 16. 種子庫Rhino Mocks
- 17. Rhino Mocks嘲笑WindowsImpersonationContext
- 18. 如何在Rhino Mocks中模擬ReadOnlyCollection <T>?
- 19. 我如何使用Rhino Mocks來模擬MEF導出?
- 20. 使用AAA語法的Rhino Mocks的嚴格模擬
- 21. 如何模擬使用Rhino Mocks對HttpContext.Cache [「MyKey」]的調用?
- 22. 使用Rhino Mocks從模擬/存根提高事件
- 23. 無法使用Rhino Mocks創建內部類型的模擬類
- 24. Rhino Mocks:如何在方法調用中模擬方法調用?
- 25. 在VB.NET中使用Rhino Mocks的Expect.Call模擬屬性
- 26. 用構造函數模擬對象 - Rhino Mocks
- 27. 如何使用Rhino Mocks模擬WCF Web服務
- 28. Rhino Mocks - 聲明不與模擬/存根交互
- 29. c#Rhino mocks - 這是一個適當的模擬使用嗎?
- 30. 如何使用Rhino Mocks對ninject的IKernel進行存根?
我知道它應該是所有明顯的,並且但是......什麼特點你在找什麼?你可以分享更多的背景嗎? – 2009-11-30 09:47:02