I find that spies make my tests less coupled to the implementation than mocks do. Mockito uses spies as the default test double whereas jMock uses mocks. A test should care about a single behavior and I like to make it explicit with the verification/assertion at the end. It's hard for me to think of examples where a mock is more suitable than a spy. Maybe for mission critical things like launching rockets? :-)