2

我正在尝试最小起订量,但在以下测试机构中遇到了问题:

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)。

而且我不太确定它的起订量,但我正在测试的代码相当简单。我不确定这是否重要,但 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; }

}

它现在抛出

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

4

2 回答 2

5

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

public abstract class ZooNode
{
    public ZooNode Parent { get; set; }
    public virtual IList<ZooNode> Children { get; set; }
}
于 2009-01-18T20:29:08.030 回答
1

机会,您从未真正初始化 Children 集合。所以,要么你需要在构造函数中初始化它,要么你可以告诉 Moq 默认模拟它。

var parent = new Mock<ZooNode>() { DefaultValue = DefaultValue.Mock };
于 2009-01-19T01:35:55.447 回答