Английское слово «mock» означает «имитация меньшего качества, чем оригинал». Вот почему даже скручиваемые вручную макеты (написанные без помощи таких структур, как Mockito) иногда называют имитами.
Язык, который использовал Мартин, сейчас немного устарел. Он написал это в контексте старых фальшивых фреймворков, таких как JMock, до того, как появились «милые насмешки». В ту эпоху издевательства были строгими; любые взаимодействия, которые не были установлены и не ожидались, потерпят неудачу.
В настоящее время мы склонны думать об этом по-другому. Если я класс, у меня есть другие классы, которые мне нужны, чтобы помочь мне. Они либо предоставляют информацию, либо выполняют какую-то работу для меня - например, хранилище может предоставить список сотрудников или сохранить нового сотрудника.
Мокса заменяют этих соавторов, и мы больше не склонны использовать ожидания в отношении имитаторов. Вместо этого мы настраиваем макеты для предоставления информации, а затем проверяем , что их попросили выполнить любую работу, которую необходимо выполнить. Mockito был первой платформой, которая работала таким образом, и поэтому различие размыто - потому что, что бы вы ни делали, вы издеваетесь над соавтором, и вам больше не нужно устанавливать ожидания. Moq работает так же в .NET.
Макеты Mockito по умолчанию даже не заботятся о том, используете ли вы их и не проверяете (хотя вам необходимо настроить любую информацию, которую они должны предоставить заранее - эквивалент «заглушки»).
Кроме того, поскольку Mockito предоставляет "хорошие" mock-ы, вам не нужно беспокоиться об установке ожиданий в случае, если где-то используется фиктивный объект - вы можете просто использовать Mockito для их создания. И, на случай, если вы захотите добавить какое-то простое поведение, Mockito позволяет вам легко выполнять обратные вызовы переданных ему аргументов, поэтому вы можете создавать «Подделки».
Неважно, кем они являются - вы просто издеваетесь над сотрудничающим классом, а гибкость означает, что вам не нужно беспокоиться о том, как вы это делаете.
Ранние фреймворки не обеспечивали такую гибкость, поэтому дифференциация Мартина была направлена на то, чтобы помочь вам правильно использовать макеты. Надеюсь, что это поможет прояснить ситуацию и объяснить, почему гибкость Мокито не недостаток, а - как указал Дэвид Уоллес - сила.