Moq中Verifiable()的目的是什么?

时间:2009-06-11 11:18:49

标签: moq

Verifiable()的目的是什么?

如果我验证Mock并将其保留,则仍会验证SetUp

修改:我正在使用VerifyAll()因此验证所有内容的原因。更改为Verify()后,仅检查了我的.Verifiable() SetUp

2 个答案:

答案 0 :(得分:73)

ADDENDUM:正如另一个答案所述,.Verifiable的目的是将Setup添加到一组“延迟Verify(...)调用”中,然后可以通过{{1}触发}}

OP的澄清清楚地表明这是目标,唯一的问题是弄清楚它为什么不起作用,但正如@Liam所说,答案也应该触及这一点: - 据我所知,关键用例是:

  • mock.Verify()mock.Setup()
  • 之间保持干燥
  • 允许用户断开验证配置与实际mock.Verify电话本身的连接(例如,您可以使用其他辅助方法进行设置)

...回到我的回答,简洁有效地说“小心,因为上述专业人士通常认为实现这些目标对于过度依赖于此类测试的测试的易读性和可维护性的影响超过了构建体“

原文:请注意,如果可能,应该遵循AAA布局,因此应尽可能doing explicit mock.Verify( expression ) calls after the work has been done, rather than a mock.Setup( ... ).Verifiable() paired with a mock.Verify() or mock.VerifyAll()(信用:@kzu)。

答案 1 :(得分:45)

在测试结束时调用Verify()方法时,如果尚未调用标记为可验证的任何期望,则异常为thrown

VerifyAll()不会检查可验证的期望。