diff --git a/buildtools/pom.xml b/buildtools/pom.xml index 77e607aeb3553..460d3d6c9f81a 100644 --- a/buildtools/pom.xml +++ b/buildtools/pom.xml @@ -50,6 +50,7 @@ 31.0.1-jre 1.10.12 1.30 + 3.12.4 --add-opens java.base/jdk.internal.loader=ALL-UNNAMED @@ -141,6 +142,16 @@ 4.1.76.Final test + + org.mockito + mockito-core + ${mockito.version} + + + org.mockito + mockito-inline + ${mockito.version} + diff --git a/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java b/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java index 354a55c10e39f..73fff1bb7e269 100644 --- a/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java +++ b/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java @@ -18,6 +18,7 @@ */ package org.apache.pulsar.tests; +import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,10 +37,22 @@ public class MockitoCleanupListener extends BetweenTestClassesListenerAdapter { @Override protected void onBetweenTestClasses(Class endedTestClass, Class startedTestClass) { - if (MOCKITO_CLEANUP_ENABLED && MockitoThreadLocalStateCleaner.INSTANCE.isEnabled()) { - LOG.info("Cleaning up Mockito's ThreadSafeMockingProgress.MOCKING_PROGRESS_PROVIDER thread local state."); - MockitoThreadLocalStateCleaner.INSTANCE.cleanup(); + if (MOCKITO_CLEANUP_ENABLED) { + if (MockitoThreadLocalStateCleaner.INSTANCE.isEnabled()) { + LOG.info("Cleaning up Mockito's ThreadSafeMockingProgress.MOCKING_PROGRESS_PROVIDER thread local state."); + MockitoThreadLocalStateCleaner.INSTANCE.cleanup(); + } + cleanupMockitoInline(); } } + /** + * Mockito-inline can leak mocked objects, we need to clean up the inline mocks after every test. + * See + * mockito docs. + */ + private void cleanupMockitoInline() { + Mockito.framework().clearInlineMocks(); + } + }