Mocking consecutive calls to a void return method

Other topics

Remarks:

Remember, for non-void methods, the when(mock.method()).thenThrow().thenReturn() version (see docs) is preferred because it is argument type-safe and more readable.

Faking a transient error

Imagine you're testing code that makes a call to this interface, and you want to make sure your retry code is working.

public interface DataStore {
    void save(Data data) throws IOException;
}

You could do something like this:

public void saveChanges_Retries_WhenDataStoreCallFails() {
    DataStore dataStore = new DataStore();
    Data data = new Data();
    doThrow(IOException.class).doNothing().when(dataStore).save(data);

    dataStore.save(data);

    verify(dataStore, times(2)).save(data);
    verifyDataWasSaved();
}

Contributors

Topic Id: 9010

Example Ids: 28013

This site is not affiliated with any of the contributors.