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.assertj.core.api.ThrowableAssert;
9 import org.junit.Test;
10 import org.mockito.Mock;
11 import org.mockito.exceptions.verification.NoInteractionsWanted;
12 import org.mockito.exceptions.verification.TooManyActualInvocations;
13 import org.mockito.exceptions.verification.WantedButNotInvoked;
14 import org.mockito.exceptions.verification.junit.ArgumentsAreDifferent;
15 import org.mockitousage.IMethods;
16 import org.mockitoutil.TestBase;
17 
18 import java.util.List;
19 
20 import static org.assertj.core.api.Assertions.assertThatThrownBy;
21 import static org.junit.Assert.fail;
22 import static org.mockito.Mockito.*;
23 
24 public class BasicVerificationTest extends TestBase {
25 
26     @Mock private List<String> mock;
27     @Mock private List<String> mockTwo;
28 
29     @Test
shouldVerify()30     public void shouldVerify() throws Exception {
31         mock.clear();
32         verify(mock).clear();
33 
34         mock.add("test");
35         verify(mock).add("test");
36 
37         verifyNoMoreInteractions(mock);
38     }
39 
40     @Test(expected=WantedButNotInvoked.class)
shouldFailVerification()41     public void shouldFailVerification() throws Exception {
42         verify(mock).clear();
43     }
44 
45     @Test
shouldFailVerificationOnMethodArgument()46     public void shouldFailVerificationOnMethodArgument() throws Exception {
47         mock.clear();
48         mock.add("foo");
49 
50         verify(mock).clear();
51 
52         assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
53             @Override
54             public void call() {
55                 verify(mock).add("bar");
56             }
57         }).isInstanceOf(ArgumentsAreDifferent.class);
58     }
59 
60     @Test
shouldFailOnWrongMethod()61     public void shouldFailOnWrongMethod() throws Exception {
62         mock.clear();
63         mock.clear();
64 
65         mockTwo.add("add");
66 
67         verify(mock, atLeastOnce()).clear();
68         verify(mockTwo, atLeastOnce()).add("add");
69         try {
70             verify(mockTwo, atLeastOnce()).add("foo");
71             fail();
72         } catch (WantedButNotInvoked e) {}
73     }
74 
75     @Test
shouldDetectRedundantInvocation()76     public void shouldDetectRedundantInvocation() throws Exception {
77         mock.clear();
78         mock.add("foo");
79         mock.add("bar");
80 
81         verify(mock).clear();
82         verify(mock).add("foo");
83 
84         try {
85             verifyNoMoreInteractions(mock);
86             fail();
87         } catch (NoInteractionsWanted e) {}
88     }
89 
90     @Test
shouldDetectWhenInvokedMoreThanOnce()91     public void shouldDetectWhenInvokedMoreThanOnce() throws Exception {
92         mock.add("foo");
93         mock.clear();
94         mock.clear();
95 
96         verify(mock).add("foo");
97 
98         try {
99             verify(mock).clear();
100             fail();
101         } catch (TooManyActualInvocations e) {}
102     }
103 
104     @Test
shouldVerifyStubbedMethods()105     public void shouldVerifyStubbedMethods() throws Exception {
106         when(mock.add("test")).thenReturn(Boolean.FALSE);
107 
108         mock.add("test");
109 
110         verify(mock).add("test");
111     }
112 
113 
114     @Test
shouldDetectWhenOverloadedMethodCalled()115     public void shouldDetectWhenOverloadedMethodCalled() throws Exception {
116         IMethods mockThree = mock(IMethods.class);
117 
118         mockThree.varargs((Object[]) new Object[] {});
119         try {
120             verify(mockThree).varargs((String[]) new String[] {});
121             fail();
122         } catch(WantedButNotInvoked e) {}
123     }
124 }
125