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.basicapi; 6 7 import org.junit.Test; 8 import org.mockito.Mock; 9 import org.mockito.exceptions.misusing.MissingMethodInvocationException; 10 import org.mockito.exceptions.misusing.NotAMockException; 11 import org.mockito.exceptions.misusing.UnfinishedVerificationException; 12 import org.mockitousage.IMethods; 13 import org.mockitoutil.TestBase; 14 15 import static org.junit.Assert.*; 16 import static org.assertj.core.api.Assertions.assertThat; 17 import static org.mockito.Mockito.*; 18 19 public class ResetTest extends TestBase { 20 21 @Mock 22 private IMethods mock; 23 24 @Mock 25 private IMethods mockTwo; 26 27 @Test shouldResetOngoingStubbingSoThatMoreMeaningfulExceptionsAreRaised()28 public void shouldResetOngoingStubbingSoThatMoreMeaningfulExceptionsAreRaised() { 29 mock.booleanReturningMethod(); 30 reset(mock); 31 try { 32 when(null).thenReturn("anything"); 33 fail(); 34 } catch (MissingMethodInvocationException e) { 35 } 36 } 37 38 @Test(expected = NotAMockException.class) resettingNonMockIsSafe()39 public void resettingNonMockIsSafe() { 40 reset(""); 41 } 42 43 @Test(expected = NotAMockException.class) resettingNullIsSafe()44 public void resettingNullIsSafe() { 45 reset(new Object[]{null}); 46 } 47 48 @Test shouldRemoveAllStubbing()49 public void shouldRemoveAllStubbing() throws Exception { 50 when(mock.objectReturningMethod(isA(Integer.class))).thenReturn(100); 51 when(mock.objectReturningMethod(200)).thenReturn(200); 52 reset(mock); 53 assertNull(mock.objectReturningMethod(200)); 54 assertEquals("default behavior should return null", null, mock.objectReturningMethod("blah")); 55 } 56 57 @Test shouldRemoveAllInteractions()58 public void shouldRemoveAllInteractions() throws Exception { 59 mock.simpleMethod(1); 60 reset(mock); 61 verifyZeroInteractions(mock); 62 } 63 64 @Test shouldRemoveStubbingToString()65 public void shouldRemoveStubbingToString() throws Exception { 66 IMethods mockTwo = mock(IMethods.class); 67 when(mockTwo.toString()).thenReturn("test"); 68 reset(mockTwo); 69 assertThat(mockTwo.toString()).contains("Mock for IMethods"); 70 } 71 72 @Test shouldStubbingNotBeTreatedAsInteraction()73 public void shouldStubbingNotBeTreatedAsInteraction() { 74 when(mock.simpleMethod("one")).thenThrow(new RuntimeException()); 75 doThrow(new RuntimeException()).when(mock).simpleMethod("two"); 76 reset(mock); 77 verifyZeroInteractions(mock); 78 } 79 80 @Test shouldNotAffectMockName()81 public void shouldNotAffectMockName() { 82 IMethods mock = mock(IMethods.class, "mockie"); 83 IMethods mockTwo = mock(IMethods.class); 84 reset(mock); 85 assertThat(mockTwo.toString()).contains("Mock for IMethods"); 86 assertEquals("mockie", "" + mock); 87 } 88 89 @Test shouldResetMultipleMocks()90 public void shouldResetMultipleMocks() { 91 mock.simpleMethod(); 92 mockTwo.simpleMethod(); 93 reset(mock, mockTwo); 94 verifyNoMoreInteractions(mock, mockTwo); 95 } 96 97 @SuppressWarnings({"MockitoUsage", "CheckReturnValue"}) 98 @Test shouldValidateStateWhenResetting()99 public void shouldValidateStateWhenResetting() { 100 //invalid verify: 101 verify(mock); 102 103 try { 104 reset(mockTwo); 105 fail(); 106 } catch (UnfinishedVerificationException e) { 107 } 108 } 109 110 @Test shouldMaintainPreviousDefaultAnswer()111 public void shouldMaintainPreviousDefaultAnswer() { 112 //given 113 mock = mock(IMethods.class, RETURNS_MOCKS); 114 //when 115 reset(mock); 116 //then 117 assertNotNull(mock.iMethodsReturningMethod()); 118 } 119 } 120