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

Verifiable()的目的是什么?

如果我validation一个Mock并将其保留,它仍然validation设置。

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

附录:正如其他答案所述, .Verifiable的目的是将一个Setup成一组“延迟Verify(...)调用”,然后可以通过mock.Verify()来触发。

OP的澄清清楚地表明,这是目标,唯一的问题是搞清楚为什么它不起作用,但正如@Liam所指出的那样,答案也应该涉及到这一点: –关键用例尽可能多看到的是:

  • 保持mock.Setup mock.Setup()mock.Verify之间的mock.Verify
  • 允许断开validation的configuration与实际的Verify调用本身的连接(例如,你可以在另一个辅助方法中设置它)

…回到我的回答中,这个回答简单而有效地说:“要小心,因为实现这些目标的效果通常被认为超过了testing的易读性和可维护性,而这些testing过于依赖这样的结构”

原文:请注意,在可能的情况下,应该遵循AAA布局,因此应该在工作完成后进行明确的mock.Verify( expression )调用,而不是mock.Setup( ... ).Verifiable() mock.Verify()mock.Verify()mock.VerifyAll()配对 (信用: @kzu )。

当在testing结束时调用Verify()方法时,如果标记为可validation的任何期望没有被调用,则thrown

VerifyAll()不检查可validation的期望。