Какова цель проверки() в Moq?

Какова цель Verifiable()?

Если я проверю a Mock и оставьте это, он все еще проверяет SetUp.

Изменить: Я использовал VerifyAll(), поэтому причина для всего, что было проверено. После изменения на Verify() проверяется только мой .Verifiable() SetUp.

Ответ 1

ADDENDUM: Как указано в другом ответе, цель .Verifiable состоит в том, чтобы .Verifiable Setup в набор "отложенных вызовов Verify(...) ", которые затем можно запускать с помощью mock.Verify().

Разъяснение OP дает понять, что это была цель, и единственной проблемой было выяснить, почему это не сработало, но, как подтолкнул @Liam, ответ должен коснуться и этого: - Ключевые варианты использования, насколько я могу увидеть это:

  • поддержание сухости между mock.Setup() и mock.Verify
  • позволяя отключить настройку проверки от самого вызова Verify (например, вы можете установить его в другом вспомогательном методе)

... и возвращаюсь к моему ответу, который кратко эффективно говорит: "будьте осторожны, поскольку вышеупомянутые плюсы, как обычно полагают, перевешиваются эффектом, который достижение этих целей оказывает на удобочитаемость и ремонтопригодность тестов, которые слишком опираются на такие конструкции"

ОРИГИНАЛ: обратите внимание, что там, где это возможно, следует вместо этого следовать схеме AAA, и, следовательно, следует делать явные mock.Verify( expression ) после выполнения работы, а не mock.Setup(...).Verifiable() в сочетании с mock.Verify() или mock.VerifyAll() где это возможно (кредит: @kzu).

Ответ 2

Когда метод Verify() вызывается в конце теста, если какие-либо из ожиданий, отмеченных как проверяемые, не были вызваны, то исключение составляет thrown.

VerifyAll() не проверяет достоверные ожидания.