Вы упомянули очень хороший пост от Мартина Фаулера на эту тему. Одна вещь, которую он упоминает, состоит в том, что mockists - те, кто любит проверять поведение и изолировать вещи.
" Классический стиль TDD состоит в том, чтобы использовать реальные объекты, если это возможно, и двойные, если неудобно использовать реальные вещи. Так что классический TDDer будет использовать реальный склад и двойную для почтовой службы. двойное не имеет большого значения.
Практикующий-теоретик TDD, тем не менее, всегда будет использовать макет для любого объекта с интересным поведением. В этом случае как для склада, так и для почтовой службы."
Если вам не нравятся подобные вещи, вы, вероятно, классический TDDer, и должны использовать макеты только тогда, когда это неудобно (например, почтовый сервис или оплата кредитной картой). В противном случае вы создаете свои собственные двойники (например, при создании базы данных в памяти).
В частности, я издеватель, но я мало проверяю, вызывается ли конкретный метод (если он не возвращает значения). В любом случае, я бы тестировал интерфейсы. Когда функция возвращает что-то, я использую макет для создания заглушек.
В конце концов, все сводится к тому, что и как вы хотите проверить . Как вы думаете, важно проверить, действительно ли эти методы были вызваны (используйте mocks)? Хотите просто проверить состояние до и после звонка (использовать подделки)? Выберите то, что достаточно, чтобы считать его работоспособным, а затем создайте свои тесты, чтобы точно это проверить!
По поводу стоимости тестов у меня есть несколько мнений:
- В краткосрочной перспективе когда вы используете TDD, вы обычно получаете лучший дизайн , хотя это может занять больше времени.
- В долгосрочной перспективе вы не будете слишком бояться изменить и сохранить этот код позже (когда вы не очень хорошо запомните детали), и вы сразу же получите красный, почти мгновенная обратная связь .
Кстати, размер тестового кода обычно такой же, как размер рабочего кода.