Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与最低起订量有问题_C#_Unit Testing_Moq - Fatal编程技术网

C# 与最低起订量有问题

C# 与最低起订量有问题,c#,unit-testing,moq,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); var child=new Mock(); var parent=new

我正在尝试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);
var child=new Mock();
var parent=new Mock();
child.Object.Parent=Parent.Object;
Expect(p=>p.Children.Contains(child.Object)).Returns(true);
它抛出:

System.ArgumentException:无效 对不可重写对象的期望 成员:p=> p、 包含(值(ZooCms.Core.Tests.Model.ZooNodeTest+c\uu DisplayClass0).child.Object)

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

提前谢谢

编辑

以下是建议修订后的代码:

公共抽象类ZooNode:ZooObject
{
私有ZooNode _parent{get;set;}
公共节点父节点{
得到
{
返回父母;
}
设置
{
如果(父项!=null)
Parent.Children.Remove(值);
_父=值;
_parent.Children.Add(此);
}
}
公共虚拟IList子项{get;private set;}
}
它现在抛出

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

如果要定义对其的期望值,则子集合属性需要是虚拟的:

public abstract class ZooNode
{
    public ZooNode Parent { get; set; }
    public virtual IList<ZooNode> Children { get; set; }
}
公共抽象类ZooNode
{
公共ZooNode父节点{get;set;}
公共虚拟IList子项{get;set;}
}
机会, 您从未实际初始化子集合。所以,要么您需要在构造函数中初始化它,要么您可以告诉Moq在默认情况下模拟它

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

当我尝试这样做时,会出现以下异常:测试方法ZooCms.Core.Tests.Model.ZooNodeTest.TestSetParentAddsNodeToParentNodeList引发异常:System.NullReferenceException:Object reference未设置为对象的实例..啊-算出了,它使用的任何对象都需要是虚拟的。。谢谢你,伙计
var parent = new Mock<ZooNode>() { DefaultValue = DefaultValue.Mock };