К основному контенту

Используйте mocks только, когда это действительно нужно

Мы уже знакомились с тем, что такое mock и как его использовать.

Недавно в рубрике "Google Testing on the Toilet" появилась короткая, но хорошая статья про то, какие минусы у mock'ов (достаточно очевидные для тех, кто уже с ними попрактиковался):

  • тесты становятся непонятными;
  • тесты становится трудно менять и поддерживать;
  • с mock у вас меньше уверенности в том, что тесты действительно правильно проверяют тестируемый код.
Одним из сигналов того, что вы увлеклись мокированием, является подмена mock'ом более чем двух классов. 
Если для понимания того, что делает тест, вам приходится смотреть в тестируемый код - то это  еще один признак лишних mock'ов.

Часто, лучше вместо mock'ов использовать эмуляторы систем, с которыми работает тестируемый код. Тесты при этом просто настраивают эту систему на нужную реакцию.

Комментарии

  1. Ну это смотря какие моки. Если они автоматические то они не сильно влияют.
    Конечно когда меняешь сигнатуры то приходится все тесты править. А на автомоках это просто чуть больше работы.

    Касательно эмуляторов , проблема в том что становится сложенее моделировать поведение. потому что если есть у нас класс с 5 сценариями, а таких классов минимум 5 , то при првоерке симыс в целом нужно уже 25 сценариев проверять. Что приводит к тому что модульные тесты будут вытеснены приемочными. На которые всегда будет не хватать тестировщиков, и система пойдет в штопор.

    ОтветитьУдалить
  2. Леша, ну про моки у меня эа прошедшие 2 года со статьи мнение не поменялось, добавить нечего :)
    А почему программисты не могут писать приемочные? :) Почему для этого "должно хватать тестировщиков"? Я считаю, что часто приемочные проще и быстрее написать, в т.ч. и из-за большой связанности кода, от которой редко удается избавится. Опять же моя практика показывает, что написанный функциональный тест редко меняется, редко удаляется (разве что функционал отключаем), чего не скажешь о юнит-тестах.

    ОтветитьУдалить

Отправка комментария

Популярные сообщения из этого блога

Mock vs Stub

Когда мы начали изучать модульное тестирование, то одними из первых терминов, с которыми пришлось познакомиться, стали Mock и Stub.

Ниже попробуем порассуждать в чем их сходство и различие, как и для чего они применяются.

Проверять работоспособность тестируемого объекта (system uder test - SUT) можно двумя способами: оценивая состояние объекта или его поведение.

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

Во-втором, мы проверяем набор и порядок действий (вызовов методов взаимодействующих объектов, других методов SUT), которое должен совершить метод SUT.

Собственно, если коротко, то в одном случае используется Stub, а в другом Mock. Это объекты, которые создаются и используются взамен реальных объектов, с которым взаимодействует SUT в процессе своей работы.

Теперь подробнее.

Gerard Meszaros использует термин Test Double (дублер), как обозначение для объекта, который зам…

План "Б" или как прикольно провести субботний день

Всем привет.
Вчера состоялась конференция "План Б". Организаторами выступили ребята из Яндекса, за что им большое спасибо. Судя по приблизительным подсчетам в мероприятии участвовало около 200 человек.

Основной темой конференции было планирование, планирование всего: проектов, разработки, тестирования, дизайнеров и даже организации музыкального фестиваля.
Сначала думал написать отчет в обычном своем стиле: кто и что говорил, но почитав твиттер по #pbconf понял, что просто потеряю время :) Поэтому кому оооочень интересно узнать подробности следуйте за птичкой и вы все узнаете (тэг #pbconf попал в top-30 твиттера)
Здесь приведу лишь те вещи, которые мне запали в мозг
Роман Чернин о продуктовой разработке: "нет заказчика, нет требований, нет сроков -> как принимать решения? ответ: заводим себе Product Manager-а"
Оля Павлова (@op): "бойтесь иллюзии точной формулировки" "заказчик - ребенок, выдаем ему игрушку как можно чаще" "не забываем, …

Полезные ресурсы для молодых (и не только) тестировщиков

Уже 3 месяца провожу собеседования тестировщиков.
Поначалу они просто  веселили - после 15-летнего опыта собеседования С++-разработчиков, общение с тестировщиками (чаще были "-цы") было чем то экзотическим и забавным.

Потом становилось все грустнее и грустнее, мимими закончилось. Началась печаль.