我正在尝试 RhinoMocks(才刚刚开始,请温柔!)并且很困惑为什么我使用此设置:
var mockRepos = new MockRepository();
var mockServiceProvider = mockRepos.DynamicMock<IServiceProvider>(null);
var mockContext = mockRepos.DynamicMock<IPluginExecutionContext>(null);
mockServiceProvider.Expect(x => x.GetService(typeof(IPluginExecutionContext))).Return(mockContext);
var someSampleClass = new SomeClassOrOther(mockServiceProvider);
在 SomeClassOrOther 中的某个时刻,调用方法 GetService
var context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
并导致异常:
Unable to cast object of type 'Castle.Proxies.ObjectProxyd0bf4b879a6341bbba3478cf1189d621' to type 'Microsoft.Xrm.Sdk.IPluginExecutionContext'.
但是如果我使用:
var mockServiceProvider = MockRepository.GenerateMock<IServiceProvider>(null);
var mockContext = MockRepository.GenerateMock<IPluginExecutionContext>(null);
mockServiceProvider.Expect(x => x.GetService(typeof(IPluginExecutionContext))).Return(mockContext);
即静态 MockRepository.GenerateMock
并且执行时没有错误。
我哪里出错了?
最佳答案
我不知道为什么你会遇到这个异常。但是,当使用“旧”非静态语法时,您会得到处于“记录”状态的模拟。在使用它们之前,您需要将它们设置为重放模式:
var mockRepos = new MockRepository();
var mockServiceProvider = mockRepos.DynamicMock<IServiceProvider>();
var mockContext = mockRepos.DynamicMock<IPluginExecutionContext>();
mockRepos.ReplayAll();
mockServiceProvider
.Stub(x => x.GetService(typeof(IPluginExecutionContext)))
.Return(mockContext);
var someSampleClass = new SomeClassOrOther(mockServiceProvider);
关于unit-testing - RhinoMocks - 使用非静态存储库时无法将类型 foo 转换为类型 bar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849482/