Какова цель 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()
не проверяет проверяемые ожидания.