It's possible I'm just not good enough at unit testing, but I've long felt there are needlessly many names for test objects: dummy, fake, stub, mock, spy.
If you're actually writing a test and need to replace some complex dependency, it's fairly obvious how much your fake version should and should not do, what it should return and whether it should register calls somehow.
So my suggestion would be to not waste too much energy on names, and just write the tests. Names can be useful when communicating with other people, but in this case everyone either doesn't know or disagrees, so it's a useless distinction.
We programmers are just not great at naming things.