在 Moq 可验证()的目的是什么?

Verifiable()的目的是什么?

如果我验证了一个 Mock并且省略了这个,它仍然验证了 SetUp

编辑: 我正在使用 VerifyAll(),因此原因一切都被验证。改为 Verify()后,只有我的 .Verifiable() SetUp被检查。

56059 次浏览

当在测试结束时调用 Verify()方法时,如果任何标记为可验证的期望都没有被调用,那么异常就是 thrown

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

附录: 正如另一个答案所述,.Verifiable的目的是将一个 Setup登记到一组“延迟的 Verify(...)调用”中,这些“延迟的 Verify(...)调用”随后可以通过 mock.Verify()触发。

OP 的澄清清楚地表明这是目标,唯一的问题是弄清楚为什么它不能工作,但是作为@Liam 的催促,答案也应该真正触及到这一点:- 我所能看到的关键用例是:

  • 保持 mock.Setup()mock.Verify之间的干燥度
  • 允许从实际的 Verify调用本身断开验证的配置(例如,您可以在另一个 helper 方法中设置它)

回到我的回答,简洁有效地说“要小心,因为通常认为,实现这些目标对过于依赖这些结构的测试的易读性和可维护性的影响超过了上述优点”

原件: 请注意,在可能的情况下,一个应该遵循 AAA布局,因此一个应该是 在工作完成后进行明确的 ABC0呼叫,而不是 ABC1与 ABC2或 mock.VerifyAll()配对在任何可能的地方(信用: @ kzu)。