summaryrefslogtreecommitdiff
path: root/src/main/java/org/mockito/plugins/InlineMockMaker.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/mockito/plugins/InlineMockMaker.java')
-rw-r--r--src/main/java/org/mockito/plugins/InlineMockMaker.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/main/java/org/mockito/plugins/InlineMockMaker.java b/src/main/java/org/mockito/plugins/InlineMockMaker.java
new file mode 100644
index 0000000..8771aa7
--- /dev/null
+++ b/src/main/java/org/mockito/plugins/InlineMockMaker.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2019 Mockito contributors
+ * This program is made available under the terms of the MIT License.
+ */
+
+package org.mockito.plugins;
+
+import org.mockito.Incubating;
+import org.mockito.MockitoFramework;
+
+/**
+ * Extension to {@link MockMaker} for mock makers that changes inline method implementations
+ * and need keep track of created mock objects.
+ * <p>
+ * Mockito's default inline mock maker keeps track of created mock objects via weak reference map.
+ * This poses a risk of memory leaks in certain scenarios
+ * (issue <a href="https://github.com/mockito/mockito/pull/1619">#1619</a>).
+ * There is no clean way to tackle those problems at the moment.
+ * Hence, {@code InlineMockMaker} interface exposes methods to explicitly clear mock references.
+ * Those methods are called by {@link MockitoFramework#clearInlineMocks()}.
+ * When the user encounters a leak, he can mitigate the problem with {@link MockitoFramework#clearInlineMocks()}.
+ * <p>
+ * {@code InlineMockMaker} is for expert users and framework integrators, when custom inline mock maker is in use.
+ * If you have a custom {@link MockMaker} that keeps track of mock objects,
+ * please have your mock maker implement {@code InlineMockMaker} interface.
+ * This way, it can participate in {@link MockitoFramework#clearInlineMocks()} API.
+ *
+ * @since 2.25.0
+ */
+@Incubating
+public interface InlineMockMaker extends MockMaker {
+
+ /**
+ * Clean up internal state for specified {@code mock}. You may assume there won't be any interaction to the specific
+ * mock after this is called.
+ *
+ * @param mock the mock instance whose internal state is to be cleaned.
+ * @since 2.25.0
+ */
+ @Incubating
+ void clearMock(Object mock);
+
+ /**
+ * Cleans up internal state for all existing mocks. You may assume there won't be any interaction to mocks created
+ * previously after this is called.
+ *
+ * @since 2.25.0
+ */
+ @Incubating
+ void clearAllMocks();
+
+}