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