• 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.assertThatThrownBy;
8 import static org.junit.Assert.fail;
9 import static org.mockito.Mockito.ignoreStubs;
10 import static org.mockito.Mockito.inOrder;
11 import static org.mockito.Mockito.verify;
12 import static org.mockito.Mockito.verifyNoMoreInteractions;
13 import static org.mockito.Mockito.when;
14 
15 import org.junit.Test;
16 import org.mockito.InOrder;
17 import org.mockito.Mock;
18 import org.mockito.exceptions.misusing.NotAMockException;
19 import org.mockito.exceptions.verification.NoInteractionsWanted;
20 import org.mockitousage.IMethods;
21 import org.mockitoutil.TestBase;
22 
23 @SuppressWarnings("unchecked")
24 public class VerificationExcludingStubsTest extends TestBase {
25 
26     @Mock IMethods mock;
27 
28     @Test
shouldAllowToExcludeStubsForVerification()29     public void shouldAllowToExcludeStubsForVerification() {
30         // given
31         when(mock.simpleMethod()).thenReturn("foo");
32 
33         // when
34         String stubbed = mock.simpleMethod(); // irrelevant call because it is stubbing
35         mock.objectArgMethod(stubbed);
36 
37         // then
38         verify(mock).objectArgMethod("foo");
39 
40         // verifyNoMoreInteractions fails:
41         try {
42             verifyNoMoreInteractions(mock);
43             fail();
44         } catch (NoInteractionsWanted e) {
45         }
46 
47         // but it works when stubs are ignored:
48         Object[] ignored = ignoreStubs(mock);
49         verifyNoMoreInteractions(mock);
50     }
51 
52     @Test
shouldExcludeFromVerificationInOrder()53     public void shouldExcludeFromVerificationInOrder() {
54         // given
55         when(mock.simpleMethod()).thenReturn("foo");
56 
57         // when
58         mock.objectArgMethod("1");
59         mock.objectArgMethod("2");
60         mock.simpleMethod(); // calling the stub
61 
62         // then
63         InOrder inOrder = inOrder(ignoreStubs(mock));
64         inOrder.verify(mock).objectArgMethod("1");
65         inOrder.verify(mock).objectArgMethod("2");
66         inOrder.verifyNoMoreInteractions();
67         verifyNoMoreInteractions(mock);
68     }
69 
70     @Test
shouldIgnoringStubsDetectNulls()71     public void shouldIgnoringStubsDetectNulls() {
72         assertThatThrownBy(
73                         () -> {
74                             Object ignored = ignoreStubs(mock, null);
75                         })
76                 .isInstanceOf(NotAMockException.class)
77                 .hasMessage("Argument should be a mock, but is null!");
78     }
79 
80     @Test
shouldIgnoringStubsDetectNonMocks()81     public void shouldIgnoringStubsDetectNonMocks() {
82         assertThatThrownBy(
83                         () -> {
84                             Object ignored = ignoreStubs(mock, new Object());
85                         })
86                 .isInstanceOf(NotAMockException.class)
87                 .hasMessage("Argument should be a mock, but is: class java.lang.Object");
88     }
89 }
90