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.assertj.core.api.Assertions.assertThatThrownBy; 9 import static org.junit.Assert.fail; 10 import static org.mockito.Mockito.mock; 11 import static org.mockito.Mockito.times; 12 import static org.mockito.Mockito.verify; 13 import static org.mockito.Mockito.verifyNoInteractions; 14 import static org.mockito.Mockito.verifyNoMoreInteractions; 15 import static org.mockito.Mockito.when; 16 17 import java.util.LinkedList; 18 import java.util.List; 19 import java.util.Map; 20 21 import org.junit.Before; 22 import org.junit.Test; 23 import org.mockito.exceptions.base.MockitoException; 24 import org.mockito.exceptions.verification.NoInteractionsWanted; 25 import org.mockitoutil.TestBase; 26 27 @SuppressWarnings("unchecked") 28 public class NoMoreInteractionsVerificationTest extends TestBase { 29 30 private LinkedList mock; 31 32 @Before setup()33 public void setup() { 34 mock = mock(LinkedList.class); 35 } 36 37 @Test shouldStubbingNotRegisterRedundantInteractions()38 public void shouldStubbingNotRegisterRedundantInteractions() { 39 when(mock.add("one")).thenReturn(true); 40 when(mock.add("two")).thenReturn(true); 41 42 mock.add("one"); 43 44 verify(mock).add("one"); 45 verifyNoMoreInteractions(mock); 46 } 47 48 @Test shouldVerifyWhenWantedNumberOfInvocationsUsed()49 public void shouldVerifyWhenWantedNumberOfInvocationsUsed() { 50 mock.add("one"); 51 mock.add("one"); 52 mock.add("one"); 53 54 verify(mock, times(3)).add("one"); 55 56 verifyNoMoreInteractions(mock); 57 } 58 59 @Test shouldFailNoMoreInteractionsVerification()60 public void shouldFailNoMoreInteractionsVerification() { 61 mock.clear(); 62 63 try { 64 verifyNoMoreInteractions(mock); 65 fail(); 66 } catch (NoInteractionsWanted e) { 67 } 68 } 69 70 @Test shouldFailNoInteractionsVerification()71 public void shouldFailNoInteractionsVerification() { 72 mock.clear(); 73 74 try { 75 verifyNoInteractions(mock); 76 fail(); 77 } catch (NoInteractionsWanted e) { 78 } 79 } 80 81 @Test shouldPrintAllInvocationsWhenVerifyingNoMoreInvocations()82 public void shouldPrintAllInvocationsWhenVerifyingNoMoreInvocations() { 83 mock.add(1); 84 mock.add(2); 85 mock.clear(); 86 87 verify(mock).add(2); 88 try { 89 verifyNoMoreInteractions(mock); 90 fail(); 91 } catch (NoInteractionsWanted e) { 92 assertThat(e).hasMessageContaining("list of all invocations"); 93 } 94 } 95 96 @Test shouldNotContainAllInvocationsWhenSingleUnwantedFound()97 public void shouldNotContainAllInvocationsWhenSingleUnwantedFound() { 98 mock.add(1); 99 100 try { 101 verifyNoMoreInteractions(mock); 102 fail(); 103 } catch (NoInteractionsWanted e) { 104 assertThat(e.getMessage()).doesNotContain("list of all invocations"); 105 } 106 } 107 108 @Test shouldVerifyOneMockButFailOnOther()109 public void shouldVerifyOneMockButFailOnOther() { 110 List<String> list = mock(List.class); 111 Map<String, Integer> map = mock(Map.class); 112 113 list.add("one"); 114 list.add("one"); 115 116 map.put("one", 1); 117 118 verify(list, times(2)).add("one"); 119 120 verifyNoMoreInteractions(list); 121 try { 122 verifyNoInteractions(map); 123 fail(); 124 } catch (NoInteractionsWanted e) { 125 } 126 } 127 128 @Test shouldVerifyOneMockButFailOnOtherVerifyNoInteractions()129 public void shouldVerifyOneMockButFailOnOtherVerifyNoInteractions() { 130 List<String> list = mock(List.class); 131 Map<String, Integer> map = mock(Map.class); 132 133 list.add("one"); 134 list.add("one"); 135 136 map.put("one", 1); 137 138 verify(list, times(2)).add("one"); 139 140 verifyNoMoreInteractions(list); 141 try { 142 verifyNoInteractions(map); 143 fail(); 144 } catch (NoInteractionsWanted e) { 145 } 146 } 147 148 // @SuppressWarnings("all") 149 @Test verifyNoMoreInteractionsShouldScreamWhenNullPassed()150 public void verifyNoMoreInteractionsShouldScreamWhenNullPassed() { 151 assertThatThrownBy( 152 () -> { 153 verifyNoMoreInteractions((Object[]) null); 154 }) 155 .isInstanceOf(MockitoException.class) 156 .hasMessageContainingAll( 157 "Method requires argument(s)!", 158 "Pass mocks that should be verified, e.g:", 159 " verifyNoMoreInteractions(mockOne, mockTwo);", 160 " verifyNoInteractions(mockOne, mockTwo);"); 161 } 162 } 163