diff --git a/subprojects/junit-jupiter/src/test/java/org/mockitousage/regression/Regression3000Test.java b/subprojects/junit-jupiter/src/test/java/org/mockitousage/regression/Regression3000Test.java new file mode 100644 index 0000000000..73ece5b611 --- /dev/null +++ b/subprojects/junit-jupiter/src/test/java/org/mockitousage/regression/Regression3000Test.java @@ -0,0 +1,84 @@ +package org.mockitousage.regression; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@ExtendWith(MockitoExtension.class) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@SuppressWarnings({ "unused", "rawtypes" }) +public class Regression3000Test { + + @Target(ElementType.TYPE) + @Retention(RetentionPolicy.RUNTIME) + public @interface Dependent { + } + + @Target(ElementType.FIELD) + @Retention(RetentionPolicy.RUNTIME) + public @interface Inject { + } + + public interface Instance { + T get(); + } + + public interface ObjectMapper { + } + + public interface EntityManager { + } + + public interface Storable { + } + + public interface StorageMessage { + } + + public interface AbstractEntityController { + } + + public static class MessageControllerBase { + } + + @Dependent + public static class StorageMessageBaseController extends MessageControllerBase { + + @Inject + Instance> controllerInstance; + @Inject + Instance> storableInstance; + @Inject + ObjectMapper objectMapper; + } + + @Mock + Instance> storableInstance; + @Mock + EntityManager em; + @Spy + @InjectMocks + StorageMessageBaseController testee; + + /** + * Verify regression issue #3000 is fixed. + */ + @Test + public void testNoArrayIndexOutOfBoundsExceptionAndMockInjected() { + assertNotNull(testee); + assertNotNull(testee.storableInstance); + assertEquals(storableInstance, testee.storableInstance); + } +}