• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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