假设我有一个具有只读属性的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)方法)。
有没有办法在没有为类创建接口的情况下对此属性进行存根?
答案 0 :(得分:5)
是的,有:创建属性virtual
,如异常消息中所述。
答案 1 :(得分:4)
您可以使用反射来调用私有设置器。
或者使用反射来查找支持字段并直接设置它(有点难,但是使用一个简单的getter处理非自动属性)。
最后,可以使用分析API。 (AFAIK Moles
基于此)。
如果任何一个好主意是一个不同的问题......