I am currently in the process of using Mockito to mock my service layer objects in a Spring MVC application in which I want to test my Controller methods. However, as I have been reading on the specifics of Mockito, I have found that the methods
doReturn(...).when(...) is equivalent to
when(...).thenReturn(...). So, my question is what is the point of having two methods that do the same thing or what is the subtle difference between
Any help would be appreciated.
The two syntaxes for stubbing are roughly equivalent. However, you can always use
doReturn/when for stubbing; but there are cases where you can't use
when/thenReturn. Stubbing void methods is one such. Others include use with Mockito spies, and stubbing the same method more than once.
One thing that
when/thenReturn gives you, that
doReturn/when doesn't, is type-checking of the value that you're returning, at compile time. However, I believe this is of almost no value - if you've got the type wrong, you'll find out as soon as you run your test.
I strongly recommend only using
doReturn/when. There is no point in learning two syntaxes when one will do.
You may wish to refer to my answer at Forming Mockito "grammars" - a more detailed answer to a very closely related question.