C# 4.0 如何使用Rhino.mock评估类属性(getter和setter)

C# 4.0 如何使用Rhino.mock评估类属性(getter和setter),c#-4.0,rhino-mocks,getter-setter,C# 4.0,Rhino Mocks,Getter Setter,我正在研究Rhino.Mocks是如何工作的,并试图了解如何在类属性中手动设置值 我在internet上看到了一个示例,其中您只将所需的属性作为Expect.Call()的参数,而不使用方法 MockRepository mocks = new MockRepository(); Person p = mocks.StrictMock<Person>(); Expect.Call(p.FirstName).Return("John"); 我总是收到错误: 无效呼叫,上次呼叫已被取

我正在研究Rhino.Mocks是如何工作的,并试图了解如何在类属性中手动设置值

我在internet上看到了一个示例,其中您只将所需的属性作为Expect.Call()的参数,而不使用方法

MockRepository mocks = new MockRepository(); 
Person p = mocks.StrictMock<Person>();
Expect.Call(p.FirstName).Return("John");
我总是收到错误:

无效呼叫,上次呼叫已被取消 已使用或未拨打电话(拨打 确保您正在调用虚拟机 (C#)/Overridable(VB)方法)


我错过什么了吗?是否可以手动设置类属性并对其进行评估,以查看getter和setter是否工作正常?

与任何模拟框架一样,Rhino mock只能模拟定义虚拟方法和属性的接口或类

这是因为在实现一个类时,Rhino从您指定的类创建一个派生类,用一个存根实现替换每个
virtual
(或VB中的
Overridable
)方法,存根实现使用拦截器来处理调用

指定非虚拟方法时,Rhino无法创建包装器

对于
密封的
在VB中不可继承的
)类也是如此

因此,为了让类正常工作,您应该实现如下属性:

public class Person
{
    public virtual string FirstName { get; set; }
}

这样Rhino就可以相应地覆盖权限。

您确定要调用虚拟财产吗?@Darin:谢谢。。我没看到打字错误
public class Person
{
    public virtual string FirstName { get; set; }
}