diff --git a/src/main/java/org/mockito/internal/InOrderImpl.java b/src/main/java/org/mockito/internal/InOrderImpl.java index 15e861b9f2..db55c62396 100644 --- a/src/main/java/org/mockito/internal/InOrderImpl.java +++ b/src/main/java/org/mockito/internal/InOrderImpl.java @@ -4,12 +4,11 @@ */ package org.mockito.internal; -import static org.mockito.internal.exceptions.Reporter.inOrderRequiresFamiliarMock; - import java.util.LinkedList; import java.util.List; import org.mockito.InOrder; +import org.mockito.MockingDetails; import org.mockito.exceptions.base.MockitoException; import org.mockito.internal.verification.InOrderContextImpl; import org.mockito.internal.verification.InOrderWrapper; @@ -21,6 +20,9 @@ import org.mockito.invocation.Invocation; import org.mockito.verification.VerificationMode; +import static org.mockito.Mockito.mockingDetails; +import static org.mockito.internal.exceptions.Reporter.*; + /** * Allows verifying in order. This class should not be exposed, hence default access. */ @@ -43,6 +45,13 @@ public T verify(T mock) { } public T verify(T mock, VerificationMode mode) { + if (mock == null) { + throw nullPassedToVerify(); + } + MockingDetails mockingDetails = mockingDetails(mock); + if (!mockingDetails.isMock()) { + throw notAMockPassedToVerify(mock.getClass()); + } if (!mocksToBeVerifiedInOrder.contains(mock)) { throw inOrderRequiresFamiliarMock(); } diff --git a/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java b/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java index 834af414c7..f424fab706 100644 --- a/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java +++ b/src/test/java/org/mockitousage/verification/BasicVerificationInOrderTest.java @@ -4,6 +4,7 @@ */ package org.mockitousage.verification; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; import static org.mockito.Mockito.*; @@ -11,6 +12,8 @@ import org.junit.Test; import org.mockito.InOrder; import org.mockito.exceptions.base.MockitoException; +import org.mockito.exceptions.misusing.NotAMockException; +import org.mockito.exceptions.misusing.NullInsteadOfMockException; import org.mockito.exceptions.verification.NoInteractionsWanted; import org.mockito.exceptions.verification.VerificationInOrderFailure; import org.mockito.exceptions.verification.WantedButNotInvoked; @@ -273,4 +276,29 @@ public void shouldFailOnVerifyNoInteractions() { public void shouldScreamWhenNullPassed() { inOrder((Object[]) null); } + + @Test + public void shouldThrowNullPassedToVerifyException() { + try { + inOrder.verify(null); + fail(); + } catch (NullInsteadOfMockException e) { + assertThat(e) + .hasMessageContaining( + "Argument passed to verify() should be a mock but is null!"); + } + } + + @Test + public void shouldThrowNotAMockPassedToVerifyException() { + Object object = new Object(); + try { + inOrder.verify(object); + fail(); + } catch (NotAMockException e) { + assertThat(e) + .hasMessageContaining( + "Argument passed to verify() is of type Object and is not a mock!"); + } + } }