diff options
Diffstat (limited to 'src/main/java/org/mockito/plugins/InlineMockMaker.java')
-rw-r--r-- | src/main/java/org/mockito/plugins/InlineMockMaker.java | 52 |
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(); + +} |