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如何理解子调用,而不是从测试下的具体实现的实际调用的角度。