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

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

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

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

2 ответа

Решение

ДОБАВЛЕНИЕ: Как говорится в другом ответе, цель .Verifiable это заручиться Setup в набор "отложено Verify(...) звонки ", которые могут быть вызваны через mock.Verify(),

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

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

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

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

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

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

Другие вопросы по тегам