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.inOrder; 10 import static org.mockito.Mockito.verify; 11 12 import org.junit.Test; 13 import org.mockito.InOrder; 14 import org.mockito.Mock; 15 import org.mockito.exceptions.misusing.UnfinishedVerificationException; 16 import org.mockito.exceptions.verification.VerificationInOrderFailure; 17 import org.mockitousage.IMethods; 18 import org.mockitoutil.TestBase; 19 20 public class FindingRedundantInvocationsInOrderTest extends TestBase { 21 22 @Mock private IMethods mock; 23 @Mock private IMethods mock2; 24 25 @Test shouldWorkFineIfNoInvocations()26 public void shouldWorkFineIfNoInvocations() throws Exception { 27 // when 28 InOrder inOrder = inOrder(mock); 29 30 // then 31 inOrder.verifyNoMoreInteractions(); 32 } 33 34 @Test shouldSayNoInteractionsWanted()35 public void shouldSayNoInteractionsWanted() throws Exception { 36 // when 37 mock.simpleMethod(); 38 39 // then 40 InOrder inOrder = inOrder(mock); 41 try { 42 inOrder.verifyNoMoreInteractions(); 43 fail(); 44 } catch (VerificationInOrderFailure e) { 45 assertThat(e).hasMessageContaining("No interactions wanted"); 46 } 47 } 48 49 @Test shouldVerifyNoMoreInteractionsInOrder()50 public void shouldVerifyNoMoreInteractionsInOrder() throws Exception { 51 // when 52 mock.simpleMethod(); 53 mock.simpleMethod(10); 54 mock.otherMethod(); 55 56 // then 57 InOrder inOrder = inOrder(mock); 58 inOrder.verify(mock).simpleMethod(10); 59 inOrder.verify(mock).otherMethod(); 60 inOrder.verifyNoMoreInteractions(); 61 } 62 63 @Test shouldVerifyNoMoreInteractionsInOrderWithMultipleMocks()64 public void shouldVerifyNoMoreInteractionsInOrderWithMultipleMocks() throws Exception { 65 // when 66 mock.simpleMethod(); 67 mock2.simpleMethod(); 68 mock.otherMethod(); 69 70 // then 71 InOrder inOrder = inOrder(mock, mock2); 72 inOrder.verify(mock2).simpleMethod(); 73 inOrder.verify(mock).otherMethod(); 74 inOrder.verifyNoMoreInteractions(); 75 } 76 77 @Test shouldFailToVerifyNoMoreInteractionsInOrder()78 public void shouldFailToVerifyNoMoreInteractionsInOrder() throws Exception { 79 // when 80 mock.simpleMethod(); 81 mock.simpleMethod(10); 82 mock.otherMethod(); 83 84 // then 85 InOrder inOrder = inOrder(mock); 86 inOrder.verify(mock).simpleMethod(10); 87 try { 88 inOrder.verifyNoMoreInteractions(); 89 fail(); 90 } catch (VerificationInOrderFailure e) { 91 } 92 } 93 94 @Test shouldFailToVerifyNoMoreInteractionsInOrderWithMultipleMocks()95 public void shouldFailToVerifyNoMoreInteractionsInOrderWithMultipleMocks() throws Exception { 96 // when 97 mock.simpleMethod(); 98 mock2.simpleMethod(); 99 mock.otherMethod(); 100 101 // then 102 InOrder inOrder = inOrder(mock, mock2); 103 inOrder.verify(mock2).simpleMethod(); 104 try { 105 inOrder.verifyNoMoreInteractions(); 106 fail(); 107 } catch (VerificationInOrderFailure e) { 108 } 109 } 110 111 @SuppressWarnings({"MockitoUsage", "CheckReturnValue"}) 112 @Test shouldValidateState()113 public void shouldValidateState() throws Exception { 114 // when 115 InOrder inOrder = inOrder(mock); 116 verify(mock); // mess up state 117 118 // then 119 try { 120 inOrder.verifyNoMoreInteractions(); 121 fail(); 122 } catch (UnfinishedVerificationException e) { 123 } 124 } 125 } 126