diff --git a/src/main/java/org/mockito/internal/stubbing/defaultanswers/TriesToReturnSelf.java b/src/main/java/org/mockito/internal/stubbing/defaultanswers/TriesToReturnSelf.java index 58a64d722e..f5643c565b 100644 --- a/src/main/java/org/mockito/internal/stubbing/defaultanswers/TriesToReturnSelf.java +++ b/src/main/java/org/mockito/internal/stubbing/defaultanswers/TriesToReturnSelf.java @@ -20,7 +20,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { Object mock = invocation.getMock(); Class mockType = MockUtil.getMockHandler(mock).getMockSettings().getTypeToMock(); - if (methodReturnType.isAssignableFrom(mockType)) { + if (methodReturnType.isAssignableFrom(mockType) && methodReturnType != Object.class) { return invocation.getMock(); } diff --git a/src/test/java/org/mockitousage/stubbing/StubbingReturnsSelfTest.java b/src/test/java/org/mockitousage/stubbing/StubbingReturnsSelfTest.java index 4e75dfb5c6..28b9cea895 100644 --- a/src/test/java/org/mockitousage/stubbing/StubbingReturnsSelfTest.java +++ b/src/test/java/org/mockitousage/stubbing/StubbingReturnsSelfTest.java @@ -73,6 +73,13 @@ public void should_not_fail_when_calling_primitive_returning_method() { assertThat(builder.returnInt()).isEqualTo(0); } + @Test + public void should_not_fail_when_calling_method_with_generic_return_type() { + Builder builder = mock(Builder.class, RETURNS_SELF); + + assertThat(builder.returnGeneric("Generic Result")).isEqualTo(null); + } + @Test public void use_full_builder_with_terminating_method() { HttpBuilder builder = mock(HttpBuilder.class, RETURNS_SELF); @@ -99,6 +106,10 @@ public void returnNothing() {} public int returnInt() { return 1; } + + public T returnGeneric(T result) { + return result; + } } private static class BuilderSubClass extends Builder {