2011-07-18 39 views
4

假設我有一個具有隻讀屬性的具體類,例如如何對具體類的ReadOnly屬性進行存根

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)方法)。

有什麼方法可以在不爲該類創建接口的情況下對該屬性進行存根?

回答

5

是的,有:使屬性virtual已經在異常消息中描述過。

+0

不改變類定義 –

+0

你如何想象這不改變你的類定義是什麼?屬性是隻讀的,就是這樣。你在思考什麼? – sll

+0

@Mark 909:不,那不可能。 –

4

您可以使用反射來調用私人setter。

或者使用反射來查找後臺字段並直接設置它(有點困難,但對非自動屬性使用簡單的getter)。

最後,可以使用profiling API。 (AFAIK Moles就是基於此)。

如果任何這是一個好主意,是一個不同的問題...

相關問題