有moq的问题

Cha*_*nce 2 c# unit-testing moq

我正在尝试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);
Run Code Online (Sandbox Code Playgroud)

抛出:

System.ArgumentException:对非可覆盖成员的期望无效:p => p.Children.Contains(value(ZooCms.Core.Tests.Model.ZooNodeTest + <> c__DisplayClass0).child.Object).

我不太确定它的moq,但我测试的代码相当简单.我不确定它是否重要,但ZooNode是一个抽象类.

提前致谢.

编辑

darin的回复建议修改后的代码:

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; }

}
Run Code Online (Sandbox Code Playgroud)

它现在抛出

测试方法ZooCms.Core.Tests.Model.ZooNodeTest.TestSetParentAddsNodeToParentNodeList引发异常:System.NullReferenceException:对象引用未设置为对象的实例..

Dar*_*rov 5

如果您想要定义期望,您的子集合属性需要是虚拟的:

public abstract class ZooNode
{
    public ZooNode Parent { get; set; }
    public virtual IList<ZooNode> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)