2009-12-18 38 views
3

比方說,我有這個類:如何用Moq存根抽象集合?

public abstract class CustomerCollectionBase : Collection<Customer>{} 

我的一個班的測試下接受CustomerCollectionBase實例(這將是一些子類)。在被測試的方法中,這個集合通過for循環枚舉並且結果被檢查和處理。 喜歡如下:

for (int i=0;i<_customers.Count; i++){ 
//process customer 
} 

是否有可能存根這個集合與起訂量,所以我可以通過存根作爲一個依賴於我的課被測的構造?

謝謝。

回答

3

從技術上講,這是可能的,但很難,因爲Collection<T>的唯一可覆蓋成員受到保護。

只要傳遞具體的集合就會容易得多,除非你絕對需要對集合本身執行一些基於交互的測試。

但是,如果你必須這樣做以起訂量,你首先需要將以下using指令添加到您的測試代碼:

using Moq.Protected; 

您現在可以使用受保護的()方法來設置模擬到使用適當的受保護的CustomerCollectionBase虛方法。

有關如何使用Moq模擬受保護成員的更多信息,請參閱this blog post