2

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

我在 Internet 上看到了一个示例,其中您只需要 Property 作为 Expect.Call() 的参数,而不是使用方法。

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

Person 是一个类,例如:

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

我总是收到错误:

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

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

4

1 回答 1

8

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

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

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

sealedTor (NonInheritable在VB中)类也是如此。

因此,为了让您的课程正常工作,您应该这样实现该属性:

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

这样,Rhino 可以相应地覆盖属性。

于 2011-03-27T09:04:59.800 回答