Mockito: multiple calls to the same method

java, junit, mocking, mockito, unit-testing

Solution

Your stub should work as you want it. From Mockito doc:

Once stubbed, the method will always return stubbed value regardless of how many times it is called.

Problem

I am mocking an object with Mockito, the same method on this object is called multiple times and I want to return the same value every time. This is what I have: ``` LogEntry entry = null; // this is a field // This method is called once only. when(mockLogger.createNewLogEntry()).thenAnswer(new Answer<LogEntry>() { @Override public LogEntry answer(InvocationOnMock invocationOnMock) throws Throwable { entry = new LogEntry(); return entry; } }); // This method can be called multiple times, // If called after createNewLogEntry() - should return initialized entry. // If called before createNewLogEntry() - should return null. when(mockLogger.getLogEntry()).thenAnswer(new Answer<LogEntry>() { @Override public LogEntry answer(InvocationOnMock invocationOnMock) throws Throwable { return entry; } }); ``` The problem is, it seems that my getLogEntry method is called only once. For all subsequent invocations, `null` is returned instead and I get NPEs in tests. How can I tell mockito to use stubbed version for all calls? ================================================================= Post mortem for future generations I did some additional investigation and as always it is not library's fault, it is my fault. In my code one of the methods called `getLogEntry()` before calling `createNewLogEntry()`. NPE was absolutely legitimate, the test actually found a bug in my code, not me finding bug in Mockito.

Original source