diff --git a/subprojects/junit-jupiter/src/test/java/org/mockitousage/GenericTypeMockTest.java b/subprojects/junit-jupiter/src/test/java/org/mockitousage/GenericTypeMockTest.java index a641060309..2908637d23 100644 --- a/subprojects/junit-jupiter/src/test/java/org/mockitousage/GenericTypeMockTest.java +++ b/subprojects/junit-jupiter/src/test/java/org/mockitousage/GenericTypeMockTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.internal.util.MockUtil; import org.mockito.junit.jupiter.MockitoExtension; @@ -442,5 +443,56 @@ public void testMockExistsAndUsed() { } } + static class Regression3019Classes { + + static class Something {} + + static class ParameterizedInjectedObject { + public void init() {} + } + + static class AbstractGenericClass { + + ParameterizedInjectedObject object; + + public void init() { + object.init(); + } + } + + static class EntryPoint extends AbstractGenericClass { + + @Override + public void init() { + super.init(); + // do other things ... + } + } + } + + /** + * Verify regression https://github.com/mockito/mockito/issues/3019 is fixed. + */ + @Nested + public class Regression3019MissingInjection { + + @Mock + private Regression3019Classes.ParameterizedInjectedObject injected; + + @InjectMocks + private Regression3019Classes.EntryPoint subject; + + @Test + public void testSuccessfullyInjected() { + assertNotNull(injected); + assertTrue(MockUtil.isMock(injected)); + assertNotNull(subject); + assertNotNull(subject.object); + // test it does not throw NPE + subject.init(); + Mockito.verify(injected).init(); + } + } + }