I found an article explain quite details about Mock, Stub and Fake:
Mock: Mocks are objects that register calls they receive.
In test assertion we can verify on Mocks that all expected actions were performed.
Stub: Stub is an object that holds predefined data and uses it to answer calls during tests. It is used when we cannot or don’t want to involve objects that would answer with real data or have undesirable side effects.
Fake: Fakes are objects that have working implementations, but not same as production one. Usually they take some shortcut and have simplified version of production code.