diff --git a/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java b/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java
index f80e7c4f4b..e5aefd958b 100644
--- a/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java
+++ b/src/main/java/org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java
@@ -9,6 +9,7 @@
import org.mockito.plugins.InstantiatorProvider;
import org.mockito.plugins.InstantiatorProvider2;
import org.mockito.plugins.MockMaker;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.plugins.MockitoPlugins;
import org.mockito.plugins.PluginSwitch;
import org.mockito.plugins.StackTraceCleanerProvider;
@@ -29,6 +30,7 @@ class DefaultMockitoPlugins implements MockitoPlugins {
DEFAULT_PLUGINS.put(InstantiatorProvider2.class.getName(), "org.mockito.internal.creation.instance.DefaultInstantiatorProvider");
DEFAULT_PLUGINS.put(AnnotationEngine.class.getName(), "org.mockito.internal.configuration.InjectingAnnotationEngine");
DEFAULT_PLUGINS.put(INLINE_ALIAS, "org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker");
+ DEFAULT_PLUGINS.put(MockitoLogger.class.getName(), "org.mockito.internal.util.ConsoleMockitoLogger");
}
@Override
diff --git a/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java b/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java
index 02e5d66d4a..2e5f069e62 100644
--- a/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java
+++ b/src/main/java/org/mockito/internal/configuration/plugins/PluginRegistry.java
@@ -9,6 +9,7 @@
import org.mockito.plugins.InstantiatorProvider;
import org.mockito.plugins.InstantiatorProvider2;
import org.mockito.plugins.MockMaker;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.plugins.PluginSwitch;
import org.mockito.plugins.StackTraceCleanerProvider;
@@ -25,9 +26,12 @@ class PluginRegistry {
private final InstantiatorProvider2 instantiatorProvider;
- private AnnotationEngine annotationEngine = new PluginLoader(pluginSwitch)
+ private final AnnotationEngine annotationEngine = new PluginLoader(pluginSwitch)
.loadPlugin(AnnotationEngine.class);
+ private final MockitoLogger mockitoLogger = new PluginLoader(pluginSwitch)
+ .loadPlugin(MockitoLogger.class);
+
PluginRegistry() {
Object impl = new PluginLoader(pluginSwitch).loadPlugin(InstantiatorProvider2.class, InstantiatorProvider.class);
if (impl instanceof InstantiatorProvider) {
@@ -75,4 +79,14 @@ InstantiatorProvider2 getInstantiatorProvider() {
AnnotationEngine getAnnotationEngine() {
return annotationEngine;
}
+
+ /**
+ * Returns the logger available for the current runtime.
+ *
+ *
Returns {@link org.mockito.internal.util.ConsoleMockitoLogger} if no
+ * {@link org.mockito.plugins.MockitoLogger} extension exists or is visible in the current classpath.
+ */
+ MockitoLogger getMockitoLogger() {
+ return mockitoLogger;
+ }
}
diff --git a/src/main/java/org/mockito/internal/configuration/plugins/Plugins.java b/src/main/java/org/mockito/internal/configuration/plugins/Plugins.java
index f65fe89ea9..84e3c0d294 100644
--- a/src/main/java/org/mockito/internal/configuration/plugins/Plugins.java
+++ b/src/main/java/org/mockito/internal/configuration/plugins/Plugins.java
@@ -4,6 +4,7 @@
*/
package org.mockito.internal.configuration.plugins;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.plugins.AnnotationEngine;
import org.mockito.plugins.InstantiatorProvider2;
import org.mockito.plugins.MockMaker;
@@ -55,6 +56,16 @@ public static AnnotationEngine getAnnotationEngine() {
return registry.getAnnotationEngine();
}
+ /**
+ * Returns the logger available for the current runtime.
+ *
+ * Returns {@link org.mockito.internal.util.ConsoleMockitoLogger} if no
+ * {@link org.mockito.plugins.MockitoLogger} extension exists or is visible in the current classpath.
+ */
+ public static MockitoLogger getMockitoLogger() {
+ return registry.getMockitoLogger();
+ }
+
/**
* @return instance of mockito plugins type
*/
diff --git a/src/main/java/org/mockito/internal/framework/DefaultMockitoSession.java b/src/main/java/org/mockito/internal/framework/DefaultMockitoSession.java
index a472f55c10..6483a1cb0d 100644
--- a/src/main/java/org/mockito/internal/framework/DefaultMockitoSession.java
+++ b/src/main/java/org/mockito/internal/framework/DefaultMockitoSession.java
@@ -11,7 +11,7 @@
import org.mockito.internal.exceptions.Reporter;
import org.mockito.internal.junit.TestFinishedEvent;
import org.mockito.internal.junit.UniversalTestListener;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.quality.Strictness;
import java.util.List;
diff --git a/src/main/java/org/mockito/internal/junit/JUnitRule.java b/src/main/java/org/mockito/internal/junit/JUnitRule.java
index b8254160cb..ba00c343ae 100644
--- a/src/main/java/org/mockito/internal/junit/JUnitRule.java
+++ b/src/main/java/org/mockito/internal/junit/JUnitRule.java
@@ -9,7 +9,7 @@
import org.mockito.Mockito;
import org.mockito.MockitoSession;
import org.mockito.internal.session.MockitoSessionLoggerAdapter;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.quality.Strictness;
import org.mockito.junit.MockitoRule;
diff --git a/src/main/java/org/mockito/internal/junit/MismatchReportingTestListener.java b/src/main/java/org/mockito/internal/junit/MismatchReportingTestListener.java
index 26d4e4e6d2..d7053962b2 100644
--- a/src/main/java/org/mockito/internal/junit/MismatchReportingTestListener.java
+++ b/src/main/java/org/mockito/internal/junit/MismatchReportingTestListener.java
@@ -4,7 +4,7 @@
*/
package org.mockito.internal.junit;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.mock.MockCreationSettings;
import java.util.Collection;
diff --git a/src/main/java/org/mockito/internal/junit/StubbingArgMismatches.java b/src/main/java/org/mockito/internal/junit/StubbingArgMismatches.java
index 3d6342c752..f125f60964 100644
--- a/src/main/java/org/mockito/internal/junit/StubbingArgMismatches.java
+++ b/src/main/java/org/mockito/internal/junit/StubbingArgMismatches.java
@@ -4,7 +4,7 @@
*/
package org.mockito.internal.junit;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.invocation.Invocation;
import java.util.LinkedHashMap;
diff --git a/src/main/java/org/mockito/internal/junit/UniversalTestListener.java b/src/main/java/org/mockito/internal/junit/UniversalTestListener.java
index f670c64bc0..d681823225 100644
--- a/src/main/java/org/mockito/internal/junit/UniversalTestListener.java
+++ b/src/main/java/org/mockito/internal/junit/UniversalTestListener.java
@@ -6,7 +6,7 @@
import org.mockito.internal.creation.settings.CreationSettings;
import org.mockito.internal.listeners.AutoCleanableListener;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.mock.MockCreationSettings;
import org.mockito.quality.Strictness;
diff --git a/src/main/java/org/mockito/internal/junit/UnusedStubbings.java b/src/main/java/org/mockito/internal/junit/UnusedStubbings.java
index 3505d2cb1c..d45b13dc6f 100644
--- a/src/main/java/org/mockito/internal/junit/UnusedStubbings.java
+++ b/src/main/java/org/mockito/internal/junit/UnusedStubbings.java
@@ -5,7 +5,7 @@
package org.mockito.internal.junit;
import org.mockito.internal.exceptions.Reporter;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.invocation.Invocation;
import org.mockito.stubbing.Stubbing;
diff --git a/src/main/java/org/mockito/internal/runners/RunnerFactory.java b/src/main/java/org/mockito/internal/runners/RunnerFactory.java
index 61456dc640..efdb6b2988 100644
--- a/src/main/java/org/mockito/internal/runners/RunnerFactory.java
+++ b/src/main/java/org/mockito/internal/runners/RunnerFactory.java
@@ -5,12 +5,12 @@
package org.mockito.internal.runners;
import org.mockito.exceptions.base.MockitoException;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.internal.junit.MismatchReportingTestListener;
import org.mockito.internal.junit.MockitoTestListener;
import org.mockito.internal.junit.NoOpTestListener;
import org.mockito.internal.junit.StrictStubsRunnerTestListener;
import org.mockito.internal.runners.util.RunnerProvider;
-import org.mockito.internal.util.ConsoleMockitoLogger;
import org.mockito.internal.util.Supplier;
import java.lang.reflect.InvocationTargetException;
@@ -39,7 +39,7 @@ public MockitoTestListener get() {
public InternalRunner createStrict(Class> klass) throws InvocationTargetException {
return create(klass, new Supplier() {
public MockitoTestListener get() {
- return new MismatchReportingTestListener(new ConsoleMockitoLogger());
+ return new MismatchReportingTestListener(Plugins.getMockitoLogger());
}
});
}
diff --git a/src/main/java/org/mockito/internal/session/DefaultMockitoSessionBuilder.java b/src/main/java/org/mockito/internal/session/DefaultMockitoSessionBuilder.java
index d9b21e580a..f47ee15972 100644
--- a/src/main/java/org/mockito/internal/session/DefaultMockitoSessionBuilder.java
+++ b/src/main/java/org/mockito/internal/session/DefaultMockitoSessionBuilder.java
@@ -5,9 +5,9 @@
package org.mockito.internal.session;
import org.mockito.MockitoSession;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.internal.framework.DefaultMockitoSession;
-import org.mockito.internal.util.ConsoleMockitoLogger;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.quality.Strictness;
import org.mockito.session.MockitoSessionBuilder;
import org.mockito.session.MockitoSessionLogger;
@@ -74,7 +74,7 @@ public MockitoSession startMocking() {
effectiveName = this.name == null ? lastTestClassInstance.getClass().getName() : this.name;
}
Strictness effectiveStrictness = this.strictness == null ? Strictness.STRICT_STUBS : this.strictness;
- MockitoLogger logger = this.logger == null ? new ConsoleMockitoLogger() : new MockitoLoggerAdapter(this.logger);
+ MockitoLogger logger = this.logger == null ? Plugins.getMockitoLogger() : new MockitoLoggerAdapter(this.logger);
return new DefaultMockitoSession(effectiveTestClassInstances, effectiveName, effectiveStrictness, logger);
}
}
diff --git a/src/main/java/org/mockito/internal/session/MockitoLoggerAdapter.java b/src/main/java/org/mockito/internal/session/MockitoLoggerAdapter.java
index b7329e781e..2197317987 100644
--- a/src/main/java/org/mockito/internal/session/MockitoLoggerAdapter.java
+++ b/src/main/java/org/mockito/internal/session/MockitoLoggerAdapter.java
@@ -4,7 +4,7 @@
*/
package org.mockito.internal.session;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.session.MockitoSessionLogger;
class MockitoLoggerAdapter implements MockitoLogger {
diff --git a/src/main/java/org/mockito/internal/session/MockitoSessionLoggerAdapter.java b/src/main/java/org/mockito/internal/session/MockitoSessionLoggerAdapter.java
index 2e8634bac5..f4770c5656 100644
--- a/src/main/java/org/mockito/internal/session/MockitoSessionLoggerAdapter.java
+++ b/src/main/java/org/mockito/internal/session/MockitoSessionLoggerAdapter.java
@@ -4,7 +4,7 @@
*/
package org.mockito.internal.session;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.session.MockitoSessionLogger;
public class MockitoSessionLoggerAdapter implements MockitoSessionLogger {
diff --git a/src/main/java/org/mockito/internal/util/ConsoleMockitoLogger.java b/src/main/java/org/mockito/internal/util/ConsoleMockitoLogger.java
index d8df8eb31f..3eb89396e1 100644
--- a/src/main/java/org/mockito/internal/util/ConsoleMockitoLogger.java
+++ b/src/main/java/org/mockito/internal/util/ConsoleMockitoLogger.java
@@ -4,6 +4,8 @@
*/
package org.mockito.internal.util;
+import org.mockito.plugins.MockitoLogger;
+
public class ConsoleMockitoLogger implements MockitoLogger {
/* (non-Javadoc)
diff --git a/src/main/java/org/mockito/junit/MockitoJUnit.java b/src/main/java/org/mockito/junit/MockitoJUnit.java
index da9428ba41..c0fb55b76b 100644
--- a/src/main/java/org/mockito/junit/MockitoJUnit.java
+++ b/src/main/java/org/mockito/junit/MockitoJUnit.java
@@ -5,9 +5,9 @@
package org.mockito.junit;
import org.mockito.Incubating;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.internal.junit.JUnitRule;
import org.mockito.internal.junit.VerificationCollectorImpl;
-import org.mockito.internal.util.ConsoleMockitoLogger;
import org.mockito.quality.Strictness;
/**
@@ -30,7 +30,7 @@ public class MockitoJUnit {
* @since 1.10.17
*/
public static MockitoRule rule() {
- return new JUnitRule(new ConsoleMockitoLogger(), Strictness.WARN);
+ return new JUnitRule(Plugins.getMockitoLogger(), Strictness.WARN);
}
/**
diff --git a/src/main/java/org/mockito/internal/util/MockitoLogger.java b/src/main/java/org/mockito/plugins/MockitoLogger.java
similarity index 84%
rename from src/main/java/org/mockito/internal/util/MockitoLogger.java
rename to src/main/java/org/mockito/plugins/MockitoLogger.java
index af66ceee7c..1040904857 100644
--- a/src/main/java/org/mockito/internal/util/MockitoLogger.java
+++ b/src/main/java/org/mockito/plugins/MockitoLogger.java
@@ -2,7 +2,7 @@
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
-package org.mockito.internal.util;
+package org.mockito.plugins;
public interface MockitoLogger {
diff --git a/src/main/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunner.java b/src/main/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunner.java
index 522b795ab8..b03b0980fc 100644
--- a/src/main/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunner.java
+++ b/src/main/java/org/mockito/runners/ConsoleSpammingMockitoJUnitRunner.java
@@ -12,11 +12,11 @@
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import org.junit.runner.notification.RunNotifier;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.internal.debugging.WarningsCollector;
import org.mockito.internal.runners.RunnerFactory;
import org.mockito.internal.runners.InternalRunner;
-import org.mockito.internal.util.ConsoleMockitoLogger;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import java.lang.reflect.InvocationTargetException;
@@ -33,7 +33,7 @@ public class ConsoleSpammingMockitoJUnitRunner extends Runner implements Filtera
private final InternalRunner runner;
public ConsoleSpammingMockitoJUnitRunner(Class> klass) throws InvocationTargetException {
- this(new ConsoleMockitoLogger(), new RunnerFactory().create(klass));
+ this(Plugins.getMockitoLogger(), new RunnerFactory().create(klass));
}
ConsoleSpammingMockitoJUnitRunner(MockitoLogger logger, InternalRunner runner) {
diff --git a/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java b/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java
index 5935eaed93..d13f729b42 100644
--- a/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java
+++ b/src/test/java/org/mockito/internal/configuration/plugins/DefaultMockitoPluginsTest.java
@@ -7,9 +7,11 @@
import org.junit.Test;
import org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker;
import org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker;
+import org.mockito.internal.util.ConsoleMockitoLogger;
import org.mockito.plugins.InstantiatorProvider;
import org.mockito.plugins.InstantiatorProvider2;
import org.mockito.plugins.MockMaker;
+import org.mockito.plugins.MockitoLogger;
import org.mockitoutil.TestBase;
import static org.junit.Assert.*;
@@ -27,5 +29,6 @@ public void provides_plugins() throws Exception {
assertEquals(ByteBuddyMockMaker.class, plugins.getDefaultPlugin(MockMaker.class).getClass());
assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider.class));
assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider2.class));
+ assertEquals(ConsoleMockitoLogger.class, plugins.getDefaultPlugin(MockitoLogger.class).getClass());
}
}
diff --git a/src/test/java/org/mockito/internal/util/SimpleMockitoLogger.java b/src/test/java/org/mockito/internal/util/SimpleMockitoLogger.java
index 129547f1c9..2d6edae6fe 100644
--- a/src/test/java/org/mockito/internal/util/SimpleMockitoLogger.java
+++ b/src/test/java/org/mockito/internal/util/SimpleMockitoLogger.java
@@ -4,6 +4,8 @@
*/
package org.mockito.internal.util;
+import org.mockito.plugins.MockitoLogger;
+
public class SimpleMockitoLogger implements MockitoLogger {
private StringBuilder loggedInfo = new StringBuilder();
diff --git a/src/test/java/org/mockitousage/junitrule/LenientJUnitRuleTest.java b/src/test/java/org/mockitousage/junitrule/LenientJUnitRuleTest.java
index 2e131710d0..9921176492 100644
--- a/src/test/java/org/mockitousage/junitrule/LenientJUnitRuleTest.java
+++ b/src/test/java/org/mockitousage/junitrule/LenientJUnitRuleTest.java
@@ -9,7 +9,7 @@
import org.mockito.Mock;
import org.mockito.quality.Strictness;
import org.mockito.internal.junit.JUnitRule;
-import org.mockito.internal.util.MockitoLogger;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.junit.MockitoRule;
import org.mockitousage.IMethods;
diff --git a/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java b/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java
index a1a3500bfa..9485d1ca3f 100644
--- a/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java
+++ b/src/test/java/org/mockitousage/plugins/MockitoPluginsTest.java
@@ -11,6 +11,7 @@
import org.mockito.plugins.InstantiatorProvider;
import org.mockito.plugins.InstantiatorProvider2;
import org.mockito.plugins.MockMaker;
+import org.mockito.plugins.MockitoLogger;
import org.mockito.plugins.MockitoPlugins;
import org.mockito.plugins.PluginSwitch;
import org.mockito.plugins.StackTraceCleanerProvider;
@@ -32,6 +33,7 @@ public void provides_built_in_plugins() {
assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider.class));
assertNotNull(plugins.getDefaultPlugin(InstantiatorProvider2.class));
assertNotNull(plugins.getDefaultPlugin(AnnotationEngine.class));
+ assertNotNull(plugins.getDefaultPlugin(MockitoLogger.class));
}
@SuppressWarnings("deprecation")
diff --git a/subprojects/android/src/main/java/org/mockito/android/internal/creation/AndroidByteBuddyMockMaker.java b/subprojects/android/src/main/java/org/mockito/android/internal/creation/AndroidByteBuddyMockMaker.java
index 56ffcec0bb..db77fb7b03 100644
--- a/subprojects/android/src/main/java/org/mockito/android/internal/creation/AndroidByteBuddyMockMaker.java
+++ b/subprojects/android/src/main/java/org/mockito/android/internal/creation/AndroidByteBuddyMockMaker.java
@@ -4,8 +4,8 @@
*/
package org.mockito.android.internal.creation;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker;
-import org.mockito.internal.util.ConsoleMockitoLogger;
import org.mockito.internal.util.Platform;
import org.mockito.invocation.MockHandler;
import org.mockito.mock.MockCreationSettings;
@@ -21,7 +21,7 @@ public AndroidByteBuddyMockMaker() {
if (Platform.isAndroid() || Platform.isAndroidMockMakerRequired()) {
delegate = new SubclassByteBuddyMockMaker(new AndroidLoadingStrategy());
} else {
- new ConsoleMockitoLogger().log(join(
+ Plugins.getMockitoLogger().log(join(
"IMPORTANT NOTE FROM MOCKITO:",
"",
"You included the 'mockito-android' dependency in a non-Android environment.",
diff --git a/subprojects/extTest/extTest.gradle b/subprojects/extTest/extTest.gradle
index 640fe48088..34fd969e77 100644
--- a/subprojects/extTest/extTest.gradle
+++ b/subprojects/extTest/extTest.gradle
@@ -17,9 +17,11 @@ repositories {
dependencies {
testCompile "org.mockito:mockito-core:$version"
+ testCompile project(":junit-jupiter")
testCompile project(path: ':', configuration: 'testUtil')
testCompile libraries.junit4
testCompile libraries.assertj
+ testCompile libraries.junitJupiterApi
}
configurations.all {
diff --git a/subprojects/extTest/src/test/java/org/mockitousage/plugins/logger/MockitoLoggerTest.java b/subprojects/extTest/src/test/java/org/mockitousage/plugins/logger/MockitoLoggerTest.java
new file mode 100644
index 0000000000..c1cce51221
--- /dev/null
+++ b/subprojects/extTest/src/test/java/org/mockitousage/plugins/logger/MockitoLoggerTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018 Mockito contributors
+ * This program is made available under the terms of the MIT License.
+ */
+package org.mockitousage.plugins.logger;
+
+import java.util.List;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@MockitoSettings(strictness = Strictness.WARN)
+@ExtendWith(MockitoExtension.class)
+class MockitoLoggerTest {
+ @BeforeAll
+ static void setUp() {
+ MyMockitoLogger.enable();
+ }
+
+ @Test
+ void strictness_warn_logged_into_custom_logger() {
+ when(mock(Foo.class).doIt()).thenReturn(123);
+ }
+
+ @AfterAll
+ static void tearDown() {
+ final List loggedItems = MyMockitoLogger.getLoggedItems();
+ assertThat(loggedItems)
+ .hasSize(1);
+ assertThat(loggedItems.get(0).toString())
+ .contains("[MockitoHint]")
+ .contains("org.mockitousage.plugins.logger.MockitoLoggerTest")
+ .contains("Unused");
+
+ MyMockitoLogger.clear();
+ }
+
+ interface Foo {
+ int doIt();
+ }
+}
diff --git a/subprojects/extTest/src/test/java/org/mockitousage/plugins/logger/MyMockitoLogger.java b/subprojects/extTest/src/test/java/org/mockitousage/plugins/logger/MyMockitoLogger.java
new file mode 100644
index 0000000000..27b44da6f1
--- /dev/null
+++ b/subprojects/extTest/src/test/java/org/mockitousage/plugins/logger/MyMockitoLogger.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018 Mockito contributors
+ * This program is made available under the terms of the MIT License.
+ */
+package org.mockitousage.plugins.logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.mockito.internal.util.ConsoleMockitoLogger;
+import org.mockito.plugins.MockitoLogger;
+
+public class MyMockitoLogger implements MockitoLogger {
+ private static final ThreadLocal enabled = new ThreadLocal() {
+ @Override
+ protected Boolean initialValue() {
+ return false;
+ }
+ };
+ private static final ThreadLocal> loggedItems = new ThreadLocal>() {
+ @Override
+ protected List initialValue() {
+ return new ArrayList();
+ }
+ };
+
+ private final MockitoLogger defaultLogger = new ConsoleMockitoLogger();
+
+ @Override
+ public void log(Object what) {
+ if (enabled.get()) {
+ loggedItems.get().add(what);
+ } else {
+ defaultLogger.log(what);
+ }
+ }
+
+ static void enable() {
+ enabled.set(true);
+ }
+
+ static List getLoggedItems() {
+ return loggedItems.get();
+ }
+
+ static void clear() {
+ enabled.remove();
+ loggedItems.remove();
+ }
+}
diff --git a/subprojects/extTest/src/test/java/org/mockitousage/plugins/switcher/PluginSwitchTest.java b/subprojects/extTest/src/test/java/org/mockitousage/plugins/switcher/PluginSwitchTest.java
index dabf4ce92e..270d084589 100644
--- a/subprojects/extTest/src/test/java/org/mockitousage/plugins/switcher/PluginSwitchTest.java
+++ b/subprojects/extTest/src/test/java/org/mockitousage/plugins/switcher/PluginSwitchTest.java
@@ -7,6 +7,7 @@
import org.junit.Test;
import org.mockitousage.plugins.instantiator.MyInstantiatorProvider2;
+import org.mockitousage.plugins.logger.MyMockitoLogger;
import org.mockitousage.plugins.stacktrace.MyStackTraceCleanerProvider;
import java.util.List;
@@ -22,7 +23,10 @@ public class PluginSwitchTest {
@Test
public void plugin_switcher_is_used() {
mock(List.class);
- assertEquals(MyPluginSwitch.invokedFor, asList(MyMockMaker.class.getName(), MyStackTraceCleanerProvider.class.getName(), MyInstantiatorProvider2.class.getName()));
+ assertEquals(MyPluginSwitch.invokedFor, asList(MyMockMaker.class.getName(),
+ MyStackTraceCleanerProvider.class.getName(),
+ MyMockitoLogger.class.getName(),
+ MyInstantiatorProvider2.class.getName()));
}
@Test
diff --git a/subprojects/extTest/src/test/resources/mockito-extensions/org.mockito.plugins.MockitoLogger b/subprojects/extTest/src/test/resources/mockito-extensions/org.mockito.plugins.MockitoLogger
new file mode 100644
index 0000000000..f072f554b4
--- /dev/null
+++ b/subprojects/extTest/src/test/resources/mockito-extensions/org.mockito.plugins.MockitoLogger
@@ -0,0 +1 @@
+org.mockitousage.plugins.logger.MyMockitoLogger
diff --git a/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java b/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java
index 54510daec1..9b90a7d16e 100644
--- a/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java
+++ b/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java
@@ -10,6 +10,8 @@
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoSession;
+import org.mockito.internal.configuration.plugins.Plugins;
+import org.mockito.internal.session.MockitoSessionLoggerAdapter;
import org.mockito.internal.configuration.MockAnnotationProcessor;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.quality.Strictness;
@@ -107,7 +109,7 @@
* }
*
*/
-public class MockitoExtension implements TestInstancePostProcessor,BeforeEachCallback, AfterEachCallback, ParameterResolver {
+public class MockitoExtension implements TestInstancePostProcessor, BeforeEachCallback, AfterEachCallback, ParameterResolver {
private final static Namespace MOCKITO = create("org.mockito");
@@ -139,7 +141,7 @@ private MockitoExtension(Strictness strictness) {
* @param context the current extension context; never {@code null}
*/
@Override
- public void postProcessTestInstance(Object testInstance, ExtensionContext context){
+ public void postProcessTestInstance(Object testInstance, ExtensionContext context) {
context.getStore(MOCKITO).put(TEST_INSTANCE, testInstance);
}
@@ -162,6 +164,7 @@ public void beforeEach(final ExtensionContext context) {
MockitoSession session = Mockito.mockitoSession()
.initMocks(testInstances.toArray())
.strictness(actualStrictness)
+ .logger(new MockitoSessionLoggerAdapter(Plugins.getMockitoLogger()))
.startMocking();
context.getStore(MOCKITO).put(SESSION, session);