• 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 
6 package org.mockitousage.verification;
7 
8 import org.junit.Before;
9 import org.junit.Test;
10 import org.mockito.InOrder;
11 import org.mockito.exceptions.verification.*;
12 import org.mockitoutil.TestBase;
13 
14 import java.util.LinkedList;
15 
16 import static junit.framework.TestCase.fail;
17 import static org.assertj.core.api.Assertions.assertThat;
18 import static org.mockito.Mockito.*;
19 
20 @SuppressWarnings("unchecked")
21 public class ExactNumberOfTimesVerificationTest extends TestBase {
22 
23     private LinkedList<String> mock;
24 
25     @Before
setup()26     public void setup() {
27         mock = mock(LinkedList.class);
28     }
29 
30     @Test
shouldDetectTooLittleActualInvocations()31     public void shouldDetectTooLittleActualInvocations() throws Exception {
32         mock.clear();
33         mock.clear();
34 
35         verify(mock, times(2)).clear();
36         try {
37             verify(mock, times(100)).clear();
38             fail();
39         } catch (TooLittleActualInvocations e) {
40             assertThat(e)
41                 .hasMessageContaining("Wanted 100 times")
42                 .hasMessageContaining("was 2");
43         }
44     }
45 
46     @Test
shouldDetectTooManyActualInvocations()47     public void shouldDetectTooManyActualInvocations() throws Exception {
48         mock.clear();
49         mock.clear();
50 
51         verify(mock, times(2)).clear();
52         try {
53             verify(mock, times(1)).clear();
54             fail();
55         } catch (TooManyActualInvocations e) {
56             assertThat(e)
57                 .hasMessageContaining("Wanted 1 time")
58                 .hasMessageContaining("was 2 times");
59         }
60     }
61 
62     @Test
shouldDetectActualInvocationsCountIsMoreThanZero()63     public void shouldDetectActualInvocationsCountIsMoreThanZero() throws Exception {
64         verify(mock, times(0)).clear();
65         try {
66             verify(mock, times(15)).clear();
67             fail();
68         } catch (WantedButNotInvoked e) {}
69     }
70 
71     @Test
shouldDetectActuallyCalledOnce()72     public void shouldDetectActuallyCalledOnce() throws Exception {
73         mock.clear();
74 
75         try {
76             verify(mock, times(0)).clear();
77             fail();
78         } catch (NeverWantedButInvoked e) {
79             assertThat(e).hasMessageContaining("Never wanted here");
80         }
81     }
82 
83     @Test
shouldPassWhenMethodsActuallyNotCalled()84     public void shouldPassWhenMethodsActuallyNotCalled() throws Exception {
85         verify(mock, times(0)).clear();
86         verify(mock, times(0)).add("yes, I wasn't called");
87     }
88 
89     @Test
shouldNotCountInStubbedInvocations()90     public void shouldNotCountInStubbedInvocations() throws Exception {
91         when(mock.add("test")).thenReturn(false);
92         when(mock.add("test")).thenReturn(true);
93 
94         mock.add("test");
95         mock.add("test");
96 
97         verify(mock, times(2)).add("test");
98     }
99 
100     @Test
shouldAllowVerifyingInteractionNeverHappened()101     public void shouldAllowVerifyingInteractionNeverHappened() throws Exception {
102         mock.add("one");
103 
104         verify(mock, never()).add("two");
105         verify(mock, never()).clear();
106 
107         try {
108             verify(mock, never()).add("one");
109             fail();
110         } catch (NeverWantedButInvoked e) {}
111     }
112 
113     @Test
shouldAllowVerifyingInteractionNeverHappenedInOrder()114     public void shouldAllowVerifyingInteractionNeverHappenedInOrder() throws Exception {
115         mock.add("one");
116         mock.add("two");
117 
118         InOrder inOrder = inOrder(mock);
119 
120         inOrder.verify(mock, never()).add("xxx");
121         inOrder.verify(mock).add("one");
122         inOrder.verify(mock, never()).add("one");
123 
124         try {
125             inOrder.verify(mock, never()).add("two");
126             fail();
127         } catch (VerificationInOrderFailure e) {}
128     }
129 }
130