c#-3.0 - 模拟对象何时进入重播状态?

标签 c#-3.0 rhino-mocks

执行此代码的第二行时,Rhino Mocks 抛出 InvalidOperationException 并显示消息“当模拟对象处于重放状态时,此操作无效”

var mockScanner = MockRepository.GenerateMock<PortScanner>(null);
        mockScanner.Expect((scanner => { scanner.Scan(null, null); }));

在调试器中单步执行代码可以看到调试器运行类中定义的方法,并且在控制离开该方法后立即发生异常。

另一个测试中的类似代码确实可以正常工作
var mockView = MockRepository.GenerateMock<IScanView>(null);
        mockView.Expect(view => { view.Close(); });
        var controller = new ScanController(mockView);
        controller.Exit();
        mockView.VerifyAllExpectations();

我能想到的唯一区别可能是这两个测试之间的任何后果是 Exit 是接口(interface)上的成员,而 Scan 是类上的虚拟成员

我错过了什么?

更新
进一步的探索表明,这与 Rhino 处理虚拟方法的方式有关。我现在专注于研究这里的文档

最佳答案

异常是因为 Rhino Mocks 没有对类型进行正确模拟所需的访问级别。使用 InternalsVisibleTo 授予对 Rhino Mocks 程序集的内部访问权限解决了该问题。

值得注意的是,这不会影响接口(interface)。我相信这是因为模拟框架需要覆盖接口(interface)上没有的类的实现。

关于c#-3.0 - 模拟对象何时进入重播状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932191/

相关文章:

c# - 将作为 ICollection<> 导出的 List<> 序列化为 XML

c# - 线程 foreach 循环的正确方法

c# - 如何在 Rhino Mocks 中模拟 ReadOnlyCollection<T>?

c# - Rhino-Mocks 如何 mock ?

c# - 重用经过验证的 Mock

c# - 隐式变量声明和三元赋值

c# - C# 中的数据网格访问

wcf - 当我在浏览器中输入 url 时,自托管 WCF 服务不起作用?

rhino-mocks - 使用引发事件的方法生成模拟对象

c# - 测试遗留代码时添加虚拟关键字