我正在研究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是否正常工作?
答案 0 :(得分:8)
与任何模拟框架一样,Rhino Mocks只能模拟定义虚拟方法和属性的接口或类。
这是因为在实现一个类时,Rhino从你指定的类创建一个派生类,用一个使用拦截器处理的拦截器实现取代每个virtual
(或VB中的Overridable
)方法。调用
当您指定非虚方法时,Rhino无法创建包装器。
这也是真正的sealed
(VB中的NonInheritable
)类。
因此,要让您的班级工作,您应该实现这样的属性:
public class Person
{
public virtual string FirstName { get; set; }
}
这样Rhino可以相应地覆盖这个词。