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

时间:2011-03-27 08:53:39

标签: c#-4.0 rhino-mocks getter-setter

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

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

MockRepository mocks = new MockRepository(); 
Person p = mocks.StrictMock<Person>();
Expect.Call(p.FirstName).Return("John");

人是一个类,如:

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

我总是收到错误:

  

无效通话,最后一次通话   使用过或没有打过电话(制作   确定你正在呼叫虚拟   (C#)/ Overridable(VB)方法)。

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

1 个答案:

答案 0 :(得分:8)

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

这是因为在实现一个类时,Rhino从你指定的类创建一个派生类,用一个使用拦截器处理的拦截器实现取代每个virtual(或VB中的Overridable)方法。调用

当您指定非虚方法时,Rhino无法创建包装器。

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

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

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

这样Rhino可以相应地覆盖这个词。