/* * 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.verification.NoInteractionsWanted; import org.mockito.exceptions.verification.VerificationInOrderFailure; import org.mockitousage.IMethods; import org.mockitoutil.TestBase; import static org.junit.Assert.fail; import static org.mockito.Mockito.*; public class SelectedMocksInOrderVerificationTest extends TestBase { private IMethods mockOne; private IMethods mockTwo; private IMethods mockThree; @Before public void setUp() { mockOne = mock(IMethods.class); mockTwo = mock(IMethods.class); mockThree = mock(IMethods.class); mockOne.simpleMethod(1); mockTwo.simpleMethod(2); mockTwo.simpleMethod(2); mockThree.simpleMethod(3); mockTwo.simpleMethod(2); mockOne.simpleMethod(4); } @Test public void shouldVerifyAllInvocationsInOrder() { InOrder inOrder = inOrder(mockOne, mockTwo, mockThree); 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 shouldVerifyInOrderMockTwoAndThree() { InOrder inOrder = inOrder(mockTwo, mockThree); inOrder.verify(mockTwo, times(2)).simpleMethod(2); inOrder.verify(mockThree).simpleMethod(3); inOrder.verify(mockTwo).simpleMethod(2); verifyNoMoreInteractions(mockTwo, mockThree); } @Test public void shouldVerifyInOrderMockOneAndThree() { InOrder inOrder = inOrder(mockOne, mockThree); inOrder.verify(mockOne).simpleMethod(1); inOrder.verify(mockThree).simpleMethod(3); inOrder.verify(mockOne).simpleMethod(4); verifyNoMoreInteractions(mockOne, mockThree); } @Test public void shouldVerifyMockOneInOrder() { InOrder inOrder = inOrder(mockOne); inOrder.verify(mockOne).simpleMethod(1); inOrder.verify(mockOne).simpleMethod(4); verifyNoMoreInteractions(mockOne); } @Test public void shouldFailVerificationForMockOne() { InOrder inOrder = inOrder(mockOne); inOrder.verify(mockOne).simpleMethod(1); try { inOrder.verify(mockOne).differentMethod(); fail(); } catch (VerificationInOrderFailure e) {} } @Test public void shouldFailVerificationForMockOneBecauseOfWrongOrder() { InOrder inOrder = inOrder(mockOne); inOrder.verify(mockOne).simpleMethod(4); try { inOrder.verify(mockOne).simpleMethod(1); fail(); } catch (VerificationInOrderFailure e) {} } @Test public void shouldVerifyMockTwoWhenThreeTimesUsed() { InOrder inOrder = inOrder(mockTwo); inOrder.verify(mockTwo, times(3)).simpleMethod(2); verifyNoMoreInteractions(mockTwo); } @Test public void shouldVerifyMockTwo() { InOrder inOrder = inOrder(mockTwo); inOrder.verify(mockTwo, atLeastOnce()).simpleMethod(2); verifyNoMoreInteractions(mockTwo); } @Test public void shouldFailVerificationForMockTwo() { InOrder inOrder = inOrder(mockTwo); try { inOrder.verify(mockTwo).simpleMethod(2); fail(); } catch (VerificationInOrderFailure e) {} } @Test public void shouldThrowNoMoreInvocationsForMockTwo() { InOrder inOrder = inOrder(mockTwo); try { inOrder.verify(mockTwo, times(2)).simpleMethod(2); fail(); } catch (VerificationInOrderFailure e) {} } @Test public void shouldThrowTooLittleInvocationsForMockTwo() { InOrder inOrder = inOrder(mockTwo); try { inOrder.verify(mockTwo, times(4)).simpleMethod(2); fail(); } catch (VerificationInOrderFailure e) {} } @Test public void shouldThrowTooManyInvocationsForMockTwo() { InOrder inOrder = inOrder(mockTwo); try { inOrder.verify(mockTwo, times(2)).simpleMethod(2); fail(); } catch (VerificationInOrderFailure e) {} } @Test public void shouldAllowThreeTimesOnMockTwo() { InOrder inOrder = inOrder(mockTwo); inOrder.verify(mockTwo, times(3)).simpleMethod(2); verifyNoMoreInteractions(mockTwo); } @Test public void shouldVerifyMockTwoCompletely() { InOrder inOrder = inOrder(mockTwo, mockThree); inOrder.verify(mockTwo, times(2)).simpleMethod(2); inOrder.verify(mockThree).simpleMethod(3); inOrder.verify(mockTwo).simpleMethod(2); verifyNoMoreInteractions(mockTwo, mockThree); } @Test public void shouldAllowTwoTimesOnMockTwo() { InOrder inOrder = inOrder(mockTwo, mockThree); inOrder.verify(mockTwo, times(2)).simpleMethod(2); try { verifyNoMoreInteractions(mockTwo); fail(); } catch (NoInteractionsWanted e) {} } }