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.
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.
Mocks are objects that register calls they receive.
In test assertion we can verify on Mocks that all expected actions were performed.
https://blog.pragmatists.com/test-doubles-fakes-mocks-and-stubs-1a7491dfa3da