1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5
6package org.mockitousage.verification;
7
8import org.junit.Test;
9import org.mockito.Mock;
10import org.mockito.exceptions.verification.NoInteractionsWanted;
11import org.mockito.exceptions.verification.TooManyActualInvocations;
12import org.mockito.exceptions.verification.WantedButNotInvoked;
13import org.mockitousage.IMethods;
14import org.mockitoutil.TestBase;
15
16import java.util.List;
17
18import static junit.framework.TestCase.fail;
19import static org.mockito.Mockito.*;
20
21public class BasicVerificationTest extends TestBase {
22
23    @Mock private List<String> mock;
24    @Mock private List<String> mockTwo;
25
26    @Test
27    public void shouldVerify() throws Exception {
28        mock.clear();
29        verify(mock).clear();
30
31        mock.add("test");
32        verify(mock).add("test");
33
34        verifyNoMoreInteractions(mock);
35    }
36
37    @Test(expected=WantedButNotInvoked.class)
38    public void shouldFailVerification() throws Exception {
39        verify(mock).clear();
40    }
41
42    @Test
43    public void shouldFailVerificationOnMethodArgument() throws Exception {
44        mock.clear();
45        mock.add("foo");
46
47        verify(mock).clear();
48        try {
49            verify(mock).add("bar");
50            fail();
51        } catch (AssertionError expected) {}
52    }
53
54    @Test
55    public void shouldFailOnWrongMethod() throws Exception {
56        mock.clear();
57        mock.clear();
58
59        mockTwo.add("add");
60
61        verify(mock, atLeastOnce()).clear();
62        verify(mockTwo, atLeastOnce()).add("add");
63        try {
64            verify(mockTwo, atLeastOnce()).add("foo");
65            fail();
66        } catch (WantedButNotInvoked e) {}
67    }
68
69    @Test
70    public void shouldDetectRedundantInvocation() throws Exception {
71        mock.clear();
72        mock.add("foo");
73        mock.add("bar");
74
75        verify(mock).clear();
76        verify(mock).add("foo");
77
78        try {
79            verifyNoMoreInteractions(mock);
80            fail();
81        } catch (NoInteractionsWanted e) {}
82    }
83
84    @Test
85    public void shouldDetectWhenInvokedMoreThanOnce() throws Exception {
86        mock.add("foo");
87        mock.clear();
88        mock.clear();
89
90        verify(mock).add("foo");
91
92        try {
93            verify(mock).clear();
94            fail();
95        } catch (TooManyActualInvocations e) {}
96    }
97
98    @Test
99    public void shouldVerifyStubbedMethods() throws Exception {
100        when(mock.add("test")).thenReturn(Boolean.FALSE);
101
102        mock.add("test");
103
104        verify(mock).add("test");
105    }
106
107
108    @Test
109    public void shouldDetectWhenOverloadedMethodCalled() throws Exception {
110        IMethods mockThree = mock(IMethods.class);
111
112        mockThree.varargs((Object[]) new Object[] {});
113        try {
114            verify(mockThree).varargs((String[]) new String[] {});
115            fail();
116        } catch(WantedButNotInvoked e) {}
117    }
118}
119