blob: d94794e1e830ef5a6d0a4476bd431d3abbf16cf9 [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.verification;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.exceptions.base.MockitoException;
import org.mockito.exceptions.verification.NoInteractionsWanted;
import org.mockito.exceptions.verification.VerificationInOrderFailure;
import org.mockito.exceptions.verification.WantedButNotInvoked;
import org.mockito.exceptions.verification.junit.ArgumentsAreDifferent;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
import static junit.framework.TestCase.fail;
import static org.mockito.Mockito.*;
public class BasicVerificationInOrderTest extends TestBase {
private IMethods mockOne;
private IMethods mockTwo;
private IMethods mockThree;
private InOrder inOrder;
@Before
public void setUp() {
mockOne = mock(IMethods.class);
mockTwo = mock(IMethods.class);
mockThree = mock(IMethods.class);
inOrder = inOrder(mockOne, mockTwo, mockThree);
mockOne.simpleMethod(1);
mockTwo.simpleMethod(2);
mockTwo.simpleMethod(2);
mockThree.simpleMethod(3);
mockTwo.simpleMethod(2);
mockOne.simpleMethod(4);
}
@Test
public void shouldVerifyInOrder() {
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
inOrder.verify(mockOne).simpleMethod(4);
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
}
@Test
public void shouldVerifyInOrderUsingAtLeastOnce() {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(4);
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
}
@Test
public void shouldVerifyInOrderWhenExpectingSomeInvocationsToBeCalledZeroTimes() {
inOrder.verify(mockOne, times(0)).oneArg(false);
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockTwo, times(0)).simpleMethod(22);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
inOrder.verify(mockOne).simpleMethod(4);
inOrder.verify(mockThree, times(0)).oneArg(false);
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
}
@Test
public void shouldFailWhenFirstMockCalledTwice() {
inOrder.verify(mockOne).simpleMethod(1);
try {
inOrder.verify(mockOne).simpleMethod(1);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailWhenLastMockCalledTwice() {
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
inOrder.verify(mockOne).simpleMethod(4);
try {
inOrder.verify(mockOne).simpleMethod(4);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test(expected = VerificationInOrderFailure.class)
public void shouldFailOnFirstMethodBecauseOneInvocationWanted() {
inOrder.verify(mockOne, times(0)).simpleMethod(1);
}
@Test(expected = VerificationInOrderFailure.class)
public void shouldFailOnFirstMethodBecauseOneInvocationWantedAgain() {
inOrder.verify(mockOne, times(2)).simpleMethod(1);
}
@Test
public void shouldFailOnSecondMethodBecauseFourInvocationsWanted() {
inOrder.verify(mockOne, times(1)).simpleMethod(1);
try {
inOrder.verify(mockTwo, times(4)).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailOnSecondMethodBecauseTwoInvocationsWantedAgain() {
inOrder.verify(mockOne, times(1)).simpleMethod(1);
try {
inOrder.verify(mockTwo, times(0)).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailOnLastMethodBecauseOneInvocationWanted() {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree, atLeastOnce()).simpleMethod(3);
inOrder.verify(mockTwo, atLeastOnce()).simpleMethod(2);
try {
inOrder.verify(mockOne, times(0)).simpleMethod(4);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailOnLastMethodBecauseOneInvocationWantedAgain() {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree, atLeastOnce()).simpleMethod(3);
inOrder.verify(mockTwo, atLeastOnce()).simpleMethod(2);
try {
inOrder.verify(mockOne, times(2)).simpleMethod(4);
fail();
} catch (VerificationInOrderFailure e) {
}
}
/* ------------- */
@Test(expected = ArgumentsAreDifferent.class)
public void shouldFailOnFirstMethodBecauseDifferentArgsWanted() {
inOrder.verify(mockOne).simpleMethod(100);
}
@Test(expected = WantedButNotInvoked.class)
public void shouldFailOnFirstMethodBecauseDifferentMethodWanted() {
inOrder.verify(mockOne).oneArg(true);
}
@Test
public void shouldFailOnSecondMethodBecauseDifferentArgsWanted() {
inOrder.verify(mockOne).simpleMethod(1);
try {
inOrder.verify(mockTwo, times(2)).simpleMethod(-999);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailOnSecondMethodBecauseDifferentMethodWanted() {
inOrder.verify(mockOne, times(1)).simpleMethod(1);
try {
inOrder.verify(mockTwo, times(2)).oneArg(true);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailOnLastMethodBecauseDifferentArgsWanted() {
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
try {
inOrder.verify(mockOne).simpleMethod(-666);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailOnLastMethodBecauseDifferentMethodWanted() {
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
try {
inOrder.verify(mockOne).oneArg(false);
fail();
} catch (VerificationInOrderFailure e) {
}
}
/* -------------- */
@Test
public void shouldFailWhenLastMethodVerifiedFirst() {
inOrder.verify(mockOne).simpleMethod(4);
try {
inOrder.verify(mockOne).simpleMethod(1);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailWhenMiddleMethodVerifiedFirst() {
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
try {
inOrder.verify(mockOne).simpleMethod(1);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailWhenMiddleMethodVerifiedFirstInAtLeastOnceMode() {
inOrder.verify(mockTwo, atLeastOnce()).simpleMethod(2);
try {
inOrder.verify(mockOne).simpleMethod(1);
fail();
} catch (VerificationInOrderFailure e) {
}
}
@Test
public void shouldFailOnVerifyNoMoreInteractions() {
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
try {
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
fail();
} catch (NoInteractionsWanted e) {
}
}
@Test(expected = NoInteractionsWanted.class)
public void shouldFailOnVerifyZeroInteractions() {
verifyZeroInteractions(mockOne);
}
@Test(expected = NoInteractionsWanted.class)
public void shouldFailOnVerifyNoInteractions() {
verifyNoInteractions(mockOne);
}
@SuppressWarnings("all")
@Test(expected = MockitoException.class)
public void shouldScreamWhenNullPassed() {
inOrder((Object[])null);
}
}