Skip to content

Commit

Permalink
Make exceptions for Inorder.verify more specific (#2263)
Browse files Browse the repository at this point in the history
Fixes #2242
  • Loading branch information
devintark committed Apr 12, 2021
1 parent 52d38f1 commit 2fa2a63
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/main/java/org/mockito/internal/InOrderImpl.java
Expand Up @@ -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;
Expand All @@ -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.
*/
Expand All @@ -43,6 +45,13 @@ public <T> T verify(T mock) {
}

public <T> 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();
}
Expand Down
Expand Up @@ -4,13 +4,16 @@
*/
package org.mockitousage.verification;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.*;

import org.junit.Before;
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;
Expand Down Expand Up @@ -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!");
}
}
}

0 comments on commit 2fa2a63

Please sign in to comment.