What would be a use case for a use of a Mockito spy?
It seems to me that every spy use case can be handled with a mock, using callRealMethod.
One difference I can see is if you want most method calls to be real, it saves some lines of code to use a mock vs. a spy. Is that it or am I missing the bigger picture?
The answer is in the documentation:
Real partial mocks (Since 1.8.0)
Finally, after many internal debates & discussions on the mailing list, partial mock support was added to Mockito. Previously we considered partial mocks as code smells. However, we found a legitimate use case for partial mocks - more reading: here
Before release 1.8 spy() was not producing real partial mocks and it was confusing for some users.
callRealMethod() was introduced after
spy(), but spy() was left there of course, to ensure backward compatibility.
Otherwise, you're right: all the methods of a spy are real unless stubbed. All the methods of a mock are stubbed unless
callRealMethod() is called. In general, I would prefer using
callRealMethod(), because it doesn't force me to use the
doXxx().when() idiom instead of the traditional