1 /* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 package org.mockitousage.verification; 6 7 import static org.assertj.core.api.Assertions.assertThat; 8 import static org.junit.Assert.fail; 9 import static org.mockito.Mockito.*; 10 11 import org.junit.Before; 12 import org.junit.Test; 13 import org.mockito.InOrder; 14 import org.mockito.exceptions.verification.VerificationInOrderFailure; 15 import org.mockito.exceptions.verification.WantedButNotInvoked; 16 import org.mockitousage.IMethods; 17 import org.mockitoutil.TestBase; 18 19 public class VerificationInOrderTest extends TestBase { 20 21 private IMethods mockOne; 22 private IMethods mockTwo; 23 private IMethods mockThree; 24 private InOrder inOrder; 25 26 @Before setUp()27 public void setUp() { 28 mockOne = mock(IMethods.class); 29 mockTwo = mock(IMethods.class); 30 mockThree = mock(IMethods.class); 31 32 inOrder = inOrder(mockOne, mockTwo, mockThree); 33 } 34 35 @Test shouldVerifySingleMockInOrderAndNotInOrder()36 public void shouldVerifySingleMockInOrderAndNotInOrder() { 37 mockOne = mock(IMethods.class); 38 inOrder = inOrder(mockOne); 39 40 mockOne.simpleMethod(1); 41 mockOne.simpleMethod(2); 42 43 verify(mockOne).simpleMethod(2); 44 verify(mockOne).simpleMethod(1); 45 46 inOrder.verify(mockOne).simpleMethod(2); 47 try { 48 inOrder.verify(mockOne).simpleMethod(1); 49 fail(); 50 } catch (VerificationInOrderFailure e) { 51 } 52 } 53 54 @Test shouldMessagesPointToProperMethod()55 public void shouldMessagesPointToProperMethod() { 56 mockTwo.differentMethod(); 57 mockOne.simpleMethod(); 58 59 try { 60 inOrder.verify(mockOne, atLeastOnce()).differentMethod(); 61 fail(); 62 } catch (WantedButNotInvoked e) { 63 assertThat(e).hasMessageContaining("differentMethod()"); 64 } 65 } 66 67 @Test shouldVerifyInOrderWhenTwoChunksAreEqual()68 public void shouldVerifyInOrderWhenTwoChunksAreEqual() { 69 mockOne.simpleMethod(); 70 mockOne.simpleMethod(); 71 mockTwo.differentMethod(); 72 mockOne.simpleMethod(); 73 mockOne.simpleMethod(); 74 75 inOrder.verify(mockOne, times(2)).simpleMethod(); 76 inOrder.verify(mockTwo).differentMethod(); 77 inOrder.verify(mockOne, times(2)).simpleMethod(); 78 try { 79 inOrder.verify(mockOne, atLeastOnce()).simpleMethod(); 80 fail(); 81 } catch (VerificationInOrderFailure e) { 82 } 83 } 84 85 @Test shouldVerifyInOrderUsingMatcher()86 public void shouldVerifyInOrderUsingMatcher() { 87 mockOne.simpleMethod(1); 88 mockOne.simpleMethod(2); 89 mockTwo.differentMethod(); 90 mockOne.simpleMethod(3); 91 mockOne.simpleMethod(4); 92 93 verify(mockOne, times(4)).simpleMethod(anyInt()); 94 95 inOrder.verify(mockOne, times(2)).simpleMethod(anyInt()); 96 inOrder.verify(mockTwo).differentMethod(); 97 inOrder.verify(mockOne, times(2)).simpleMethod(anyInt()); 98 try { 99 inOrder.verify(mockOne, times(3)).simpleMethod(anyInt()); 100 fail(); 101 } catch (VerificationInOrderFailure e) { 102 } 103 } 104 } 105