Skip to content

Instantly share code, notes, and snippets.

@ufuk
Last active October 24, 2021 17:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ufuk/775c14c89d3595c5435ae13480a060da to your computer and use it in GitHub Desktop.
Save ufuk/775c14c89d3595c5435ae13480a060da to your computer and use it in GitHub Desktop.
Performs "verify no more interactions" check automatically for all mock objects (works with Mockito version 2 or higher & JUnit version 4 and 5). For detailed description: https://ufukuzun.wordpress.com/2019/04/09/ne-olup-bittiginden-habersiz-testlere-derman-mockscollector/ (Turkish)
import org.apache.commons.lang3.ArrayUtils;
import org.junit.After;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@RunWith(MockitoJUnitRunner.class)
public abstract class BaseMockito2JUnit4Test {
private final Mockito2MocksCollector mockito2MocksCollector = new Mockito2MocksCollector();
@After
public void after() {
final Object[] allMocks = mockito2MocksCollector.getAllMocks();
if (ArrayUtils.isNotEmpty(allMocks)) {
verifyNoMoreInteractions(allMocks);
}
mockito2MocksCollector.close();
}
protected InOrder inOrderVerifier() {
return inOrder(mockito2MocksCollector.getAllMocks());
}
}
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InOrder;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@ExtendWith(MockitoExtension.class)
public class BaseMockito2JUnit5Test {
private final Mockito2MocksCollector mockito2MocksCollector = new Mockito2MocksCollector();
@AfterEach
void after() {
final Object[] allMocks = mockito2MocksCollector.getAllMocks();
if (ArrayUtils.isNotEmpty(allMocks)) {
verifyNoMoreInteractions(allMocks);
}
mockito2MocksCollector.close();
}
protected InOrder inOrderVerifier() {
return inOrder(mockito2MocksCollector.getAllMocks());
}
}
import org.mockito.Mockito;
import org.mockito.internal.progress.MockingProgress;
import org.mockito.internal.progress.ThreadSafeMockingProgress;
import org.mockito.listeners.MockCreationListener;
import java.util.LinkedList;
import java.util.List;
public final class Mockito2MocksCollector {
private final List<Object> createdMocks = new LinkedList<>();
private final MockCreationListener mockCreationListener;
public Mockito2MocksCollector() {
MockingProgress mockingProgress = ThreadSafeMockingProgress.mockingProgress();
mockCreationListener = (mock, settings) -> createdMocks.add(mock);
mockingProgress.addListener(mockCreationListener);
}
public void close() {
Mockito.framework().removeListener(mockCreationListener);
}
public Object[] getAllMocks() {
return createdMocks.toArray();
}
}
@yusufcakal
Copy link

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment