| /* |
| * 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); |
| } |
| } |