如何使用Rhino.Mocks来评估类属性(getter和setter)

Jun*_*r M 2 rhino-mocks getter-setter c#-4.0

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

我在互联网上看到过一个样本,你只希望Property作为Expect.Call()的参数,而不是使用方法.

MockRepository mocks = new MockRepository(); 
Person p = mocks.StrictMock<Person>();
Expect.Call(p.FirstName).Return("John");
Run Code Online (Sandbox Code Playgroud)

人是一类如:

public class Person
{
   public string FirstName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我总是收到错误:

呼叫无效,最后一次呼叫已被使用或未进行任何呼叫(确保您正在调用虚拟(C#)/可覆盖(VB)方法).

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

Pau*_*tos 8

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

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

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

这也是真正的sealed(NonInheritable在VB中)类.

因此,要让您的班级工作,您应该如下实现该属性:

public class Person
{
    public virtual string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这样Rhino就可以相应地覆盖这个属性.