Sometimes you use a framework for years, and then discover something new that it can do.
I had one of those moments today with Mockito.
I have an API that I am mocking, where I need to capture the argument passed in for further testing, that had a line that ended up looking something like this:
This is actually incorrect Mockito syntax. The captor.capture() doesn’t go inside a “thenReturn” statement.
The underlying API (Spring-Data) has methods that typically return the first parameter:
/** * Saves a given entity. Use the returned instance for further operations as the save operation might have changed the * entity instance completely. * * @param entity * @return the saved entity */ < S extends T> S save(S entity);
The more correct way (aside from refactoring how the code works) to use Mockito would be do use thenAnswer(Answer<>), instead of thenReturn. Since we don’t want to clutter our code with an additional 5 lines for an inline Answer instance, there is a helper class in Mockito: AdditionalAnswers.
The simplified solution: