2013-06-20 61 views
3

我有以下幾點:如何嘲笑的ObservableCollection

class foo : ObservableCollection<Int32> 
{ 
    //Stuff 
} 


[Test] 
public void test() 
{ 
    var foo = Mock.Of<foo>(); 
    int count = 0; 
    Mock.Get(foo).Setup(x => x.Add(It.IsAny<Int32>())).Callback(() => count++); 
    Mock.Get(foo).Setup(x => x.Count).Returns(() => count); 
    //Do Stuff 
} 

然而,AddCount,尤其是indexer[]是不能覆寫。我唯一的辦法是創建Addfoo,在我的foo類中調用Add等等?

+1

你總是可以做到基於狀態的驗證你爲什麼要嘲笑這個? – ken2k

回答

4

我不認爲你應該嘲笑ListObservableCollectionDateTime(即使有可能)等基本類型。他們是可靠的,不太可能改變。在測試中使用ObservableCollection,而不是試圖重新實現它的增加計數功能。如果您使用的是自定義類型Foo是從ObservableCollection<Int32>繼承,那麼你也可以實現一些IFoo界面,將很容易嘲笑

var items = new ObservableCollection<int>(); 
// Do stuff 
Assert.That(items.Count, Is.EqualTo(5)); 

public class Foo : ObservableCollection<Int32>, IFoo 
+0

是的,我需要更深入地看待測試的實際需求。這是一個同事的考驗,我忘記了對最初假設提出質疑的金科玉律。這可能是本身的問題 –

+2

由於foo中有功能,我們只需在模擬上設置'CallBase = true'。所以,我們不必擔心重寫Add,Count等。但是,可以覆蓋自定義內容 –