А чем отличается Fake от Mock?
Как я понял, в Fake ты должен обязательно переопределить те методы, которыми будешь пользоваться, иначе он будет бросать UnimplementedError; в Mock же ничего переопределять не надо.
Почему же тогда написано: "Рекомендуется сначала применять реальный объект, потом Fake, и только потом Mock"?
Stub обьект, поведение которого определяется для ряда тестов. Mock обьект, который ведет себя так, как нужно тебе в каждом тесте. Fake это по сути "полноценный" stub. Может вызывать реальную логику, но полностью не повторяет реальный обьект (вэб-сервис, например или сервисный метод). Как-то так я понимаю. Если кто-то поправит меня, будет здорово.