Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# Moq验证链接_C#_.net_Moq - Fatal编程技术网

C# Moq验证链接

C# Moq验证链接,c#,.net,moq,C#,.net,Moq,如果我有一个依赖项IObjectA,它包含IObjectB类型的PropertyA,在IObjectB中有一个公共方法Foo() 为了Verify() Mock<IObjectA> objectA = new Mock<IObjectA>(); Mock<IObjectB> objectB = new Mock<IObjectB>(); //A objectA.Verify(x => x.PropertyA.Foo()); //B obj

如果我有一个依赖项
IObjectA
,它包含
IObjectB
类型的
PropertyA
,在
IObjectB
中有一个公共方法
Foo()

为了
Verify()

Mock<IObjectA> objectA = new Mock<IObjectA>();
Mock<IObjectB> objectB = new Mock<IObjectB>();

//A
objectA.Verify(x => x.PropertyA.Foo());

//B
objectA.Verify(x => x.PropertyA);
objectB.Verify(x => x.Foo());
Mock objectA=new Mock();
Mock objectB=new Mock();
//A
验证(x=>x.PropertyA.Foo());
//B
objectA.Verify(x=>x.PropertyA);
objectB.Verify(x=>x.Foo());

“B”似乎更正确,但并不验证我的调试,也不符合我的调试“逐步通过”,但“A”得到了正确的结果。即使objectA是模拟类型,也可以询问它的属性和用于调用的属性吗?

为什么您认为B更正确

示例A是在对象内部检查PropertyA是否调用了foo

在本例中,objectA和objectB并没有绑定在一起。因此,示例B的当前形式似乎有误导性,因为它试图表明存在某种关系

现在,如果您使用
setup
将objectB分配给objectA,那么这两个示例都应该可以工作(因为您正在告诉Moq objectA与objectB的关系)。执行此设置将创建要验证的关系

大致如下:

objectA.Setup(x => x.PropertyA).Returns(objectB)

这基本上是说“当PropertyA被调用时,将objectB还给我。”

谢谢,是的,从PropertyA返回objectB就可以了。Verify(x=>x.PropertyA.Foo())也验证Foo()调用,这是假阳性吗?有些人告诉我x.PropertyA.Foo()是无效的调用,因为objectA的属性不能用于调用,对吗?你对A的看法是正确的。很抱歉,我读错了,想错了。我是从测试的角度思考的,即mock如何理解子调用,而不是从测试下的具体实现的实际调用的角度。