簡體   English   中英

如何存根具體 class 的 ReadOnly 屬性

[英]How to Stub a ReadOnly property of a concrete class

假設我有一個具有只讀屬性的混凝土 class 例如

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

現在我想存根對 Squid 的響應,例如

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

但是,當我運行它時,我收到以下錯誤消息: System.InvalidOperationException: Invalid call, last call has been used or no call has been made (確保您正在調用虛擬 (C#) / Overridable (VB) 方法) .

有沒有辦法在不為 class 創建接口的情況下對這個屬性進行存根?

是的,有:如異常消息中所述,使屬性為virtual

您可以使用反射來調用私有設置器。

或者使用反射來查找支持字段並直接設置它(有點困難,但適用於具有微不足道的 getter 的非自動屬性)。

最后,可以為此使用分析 API。 (AFAIK Moles就是基於此)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM