Last active
October 24, 2021 17:52
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
👍