Moq验证链接
本文关键字:链接 验证 Moq | 更新日期: 2023-09-27 18:25:56
如果我有一个依赖IObjectA
,它包含类型为IObjectB
的PropertyA
,在IObjectB
中有一个公共方法Foo()
。
为了调用Verify()
Foo(),可以做这两件事中的任何一件,哪一件是正确的?
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());
"B"似乎更正确,但没有验证和反驳我的调试"逐步完成","A"却得到了正确的结果。对象a是否可以被询问其属性以及用于调用的那些属性,即使它是一个模拟类型?
为什么你认为B看起来更正确?
示例A在对象A内部表示检查PropertyA是否调用了foo
在本例中,对象A和对象B无论如何都没有绑定在一起。因此,以目前的形式来看,例子B似乎具有误导性,因为它试图表明存在某种关系。
现在,如果您使用setup
将对象B分配给对象A,那么这两个例子都应该有效(因为您正在告诉Moq对象A与对象B的关系)。执行此设置将创建要验证的关系。
大致如下:
objectA.Setup(x => x.PropertyA).Returns(objectB)
这基本上是说"当PropertyA被调用时,将对象B还给我。"