與MOQ

2009-01-18 39 views
2

有問題,我嘗試起訂量和我遇到一個問題,下面的測試體:與MOQ

var child = new Mock<ZooNode>(); 
var parent = new Mock<ZooNode>(); 
child.Object.Parent = parent.Object; 
parent.Expect(p => p.Children.Contains(child.Object)).Returns(true); 

會拋出:

System.ArgumentException:無效 預期上一個不可覆蓋的 成員:p => p.Children.Contains(value(ZooCms.Core.Tests.Model.ZooNodeTest + <> c__DisplayClass0).child.Object)。

我不太確定它的moq,但我測試的代碼非常簡單。我不確定它是否重要,但ZooNode是一個抽象類。

在此先感謝。

編輯

繼承人從darin's response代碼建議修訂後:

public abstract class ZooNode : ZooObject 
{ 
    private ZooNode _parent{ get; set;} 
    public ZooNode Parent { 
     get 
     { 
      return _parent; 
     } 
     set 
     { 
      if(Parent != null) 
       Parent.Children.Remove(value); 
      _parent = value; 
      _parent.Children.Add(this); 
     } 
    } 
    public virtual IList<ZooNode> Children { get; private set; } 

} 

現在拋出

試驗方法 ZooCms.Core.Tests.Model.ZooNodeTest .TestSetParentAddsNodeToParentNodeList 拋出異常: System.NullReferenceException:對象 引用未設置爲一個 對象的實例..

回答

4

兒童集合屬性必須是虛擬的,如果你想在這裏定義的期望:

public abstract class ZooNode 
{ 
    public ZooNode Parent { get; set; } 
    public virtual IList<ZooNode> Children { get; set; } 
} 
+0

當我嘗試,我得到下面的異常信息:System.NullReferenceException: ZooCms.Core.Tests.Model.ZooNodeTest.TestSetParentAddsNodeToParentNodeList拋出異常檢測方法的對象引用不設置到對象的實例.. – Chance 2009-01-18 20:45:18

1

機會, 你永遠不會實際初始化Children集合。因此,無論是需要在構造函數中初始化它,還是默認情況下都可以告訴Moq。

var parent = new Mock<ZooNode>() { DefaultValue = DefaultValue.Mock };