ДОПОЛНЕНИЕ: В других государствах ответа, цель .Verifiable
является завербовать Setup
в набор «отложенных Verify(...)
вызовов», которые затем могут быть вызваны с помощью mock.Verify()
.
уточнение Ор проясняет, что это была цель, и единственная проблема была выяснить, почему он не работает, но, как ткнул @Liam, ответ должен действительно коснуться этого тоже: - Ключ использования случаев, насколько я могу видеть, являются:
- поддержания Сухость между
mock.Setup()
и mock.Verify
- позволяющий отсоединять конфигурирование в проверке с самого (например, вы можете установить его в другой фактической
Verify
вызова вспомогательный метод)
... и вернемся к моему ответу, в котором, как правило, говорится: «Будьте осторожны, поскольку вышеупомянутые плюсы обычно считаются перевешенными тем, что достижение этих целей зависит от удобочитаемости и ремонтопригодности тестов, которые слишком много опираются на такие конструкции»
ORIGINAL: Обратите внимание, что там, где это возможно, следует вместо этого следовать AAA расположение и, следовательно, один должен быть doing explicit mock.Verify(expression)
calls after the work has been done, rather than a mock.Setup(...).Verifiable()
paired with a mock.Verify()
or mock.VerifyAll()
везде, где это возможно (кредит: @kzu).
Чтобы уточнить - если мне нужен макет, чтобы что-то вернуть в тестируемый код, это тот случай, когда 'Setup (...)' (в моем разделе упорядочивания) и 'VerifyAll()' (в моем утверждении раздел) было бы уместным? –
@ EricSmith Оглядываясь назад, не думаю, что я выразился достаточно сильно. Большую выгоду от разделения вашей работы на объединение AAA, чем избыток концентрации на общности между фазой Arrange и Assert. В 90% случаев есть что-то, что можно получить от нюансов о том, как вы выражаете вызовы Verify в конце, поэтому вам нужно потратить много времени, чтобы оптимизировать для этого, даже если в некоторых случаях, если это похоже на какое-то болезненное дублирование. Один из пунктов http://manning.com/osherove делает очень хорошо, так это то, что делать тест имеет смысл для кого-то, кто прыгает в критический момент - так придерживайтесь условностей! –
Я, как правило, не против противоречия принятой мудрости, но до сих пор не убежден в преимуществах AAA против 'Verifyable()'/'VerifyAll()' во всех случаях. Мой текущий модульный тест содержит большое количество вызовов 'Setup (...)' (> 30). Может соответствовать каждому из них с эквивалентом Verify(), чтобы удовлетворить соглашение, но это приводит к большому дублированию кода и будет сложнее поддерживать и читать по мере увеличения количества модульных тестов. Я предполагаю, что я действительно спрашиваю, могут ли исключения быть сделаны, если существует большое количество установок или это предотвращение 'Verifiable()' жесткого и быстрого правила? –