unit-testing - RhinoMocks - 使用非静态存储库时无法将类型 foo 转换为类型 bar

标签 unit-testing rhino-mocks

我正在尝试 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/

相关文章:

c# - 使用 IQueryable 的单元测试代码

c# - 测试单实例是否存在-Singleton-C#

java - 为什么我们应该通过mock来了解邻居对象的信息?

c# - 单元测试时模拟CancellationToken.IsCancellationRequested

c# - 如何测试抽象类的 protected 抽象方法?

c# - 为什么 Rhino.Mocks 和 Moq 说 Bar 是不可覆盖的成员?

c# - 使用 Rhino.Mocks 检查传递给委托(delegate)的预期值

c# - 从 dotnet 测试中排除命名空间

java - 测试 AWS SNS 实用程序类

.net - Rhino Mocks 中所有输入的 stub 返回值