如何存根具体类的ReadOnly属性

时间:2011-07-18 10:57:26

标签: c# .net rhino-mocks

假设我有一个具有只读属性的Concrete类,例如。

public class TestClass
{
   public bool Squid {get;private set;}
}

现在我想把对Squid的回复存根,例如

Squid squid = MockRepository.GenerateStub<Squid>();
squid.Stub(c => c.Squid).Return(true);

但是,当我运行此命令时,我收到以下错误消息: System.InvalidOperationException:无效调用,最后一次调用已被使用或未进行任何调用(请确保您正在调用虚拟(C#)/ Overridable(VB)方法)。

有没有办法在没有为类创建接口的情况下对此属性进行存根?

2 个答案:

答案 0 :(得分:5)

是的,有:创建属性virtual,如异常消息中所述。

答案 1 :(得分:4)

您可以使用反射来调用私有设置器。

或者使用反射来查找支持字段并直接设置它(有点难,但是使用一个简单的getter处理非自动属性)。

最后,可以使用分析API。 (AFAIK Moles基于此)。

如果任何一个好主意是一个不同的问题......