DefaultMockitoFrameworkTest.java revision 2637d96c202372854a7c71466ddcc6e90fc4fc53
1package org.mockito.internal.framework; 2 3import org.junit.After; 4import org.junit.Test; 5import org.mockito.ArgumentMatchers; 6import org.mockito.MockSettings; 7import org.mockito.StateMaster; 8import org.mockito.exceptions.misusing.RedundantListenerException; 9import org.mockito.listeners.MockCreationListener; 10import org.mockito.listeners.MockitoListener; 11import org.mockito.mock.MockCreationSettings; 12import org.mockitoutil.TestBase; 13 14import java.util.List; 15import java.util.Set; 16 17import static org.mockito.ArgumentMatchers.any; 18import static org.mockito.Mockito.*; 19import static org.mockitoutil.ThrowableAssert.assertThat; 20 21public class DefaultMockitoFrameworkTest extends TestBase { 22 23 private DefaultMockitoFramework framework = new DefaultMockitoFramework(); 24 25 @After public void clearListeners() { 26 new StateMaster().clearMockitoListeners(); 27 } 28 29 @Test(expected = IllegalArgumentException.class) 30 public void prevents_adding_null_listener() { 31 framework.addListener(null); 32 } 33 34 @Test(expected = IllegalArgumentException.class) 35 public void prevents_removing_null_listener() { 36 framework.removeListener(null); 37 } 38 39 @Test 40 public void ok_to_remove_unknown_listener() { 41 //it is safe to remove listener that was not added before 42 framework.removeListener(new MockitoListener() {}); 43 } 44 45 @Test 46 public void ok_to_remove_listener_multiple_times() { 47 MockitoListener listener = new MockitoListener() {}; 48 49 //when 50 framework.addListener(listener); 51 52 //then it is ok to: 53 framework.removeListener(listener); 54 framework.removeListener(listener); 55 } 56 57 @Test 58 public void adds_creation_listener() { 59 //given creation listener is added 60 MockCreationListener listener = mock(MockCreationListener.class); 61 framework.addListener(listener); 62 63 //when 64 MockSettings settings = withSettings().name("my list"); 65 List mock = mock(List.class, settings); 66 Set mock2 = mock(Set.class); 67 68 //then 69 verify(listener).onMockCreated(eq(mock), any(MockCreationSettings.class)); 70 verify(listener).onMockCreated(eq(mock2), any(MockCreationSettings.class)); 71 verifyNoMoreInteractions(listener); 72 } 73 74 @Test 75 public void removes_creation_listener() { 76 //given creation listener is added 77 MockCreationListener listener = mock(MockCreationListener.class); 78 framework.addListener(listener); 79 80 //and hooked up correctly 81 mock(List.class); 82 verify(listener).onMockCreated(ArgumentMatchers.any(), any(MockCreationSettings.class)); 83 84 //when 85 framework.removeListener(listener); 86 mock(Set.class); 87 88 //then 89 verifyNoMoreInteractions(listener); 90 } 91 92 @Test public void prevents_duplicate_listeners_of_the_same_type() { 93 //given creation listener is added 94 framework.addListener(new MyListener()); 95 96 assertThat(new Runnable() { 97 @Override 98 public void run() { 99 framework.addListener(new MyListener()); 100 } 101 }) .throwsException(RedundantListenerException.class) 102 .throwsMessage("\n" + 103 "Problems adding Mockito listener.\n" + 104 "Listener of type 'MyListener' has already been added and not removed.\n" + 105 "It indicates that previous listener was not removed according to the API.\n" + 106 "When you add a listener, don't forget to remove the listener afterwards:\n" + 107 " Mockito.framework().removeListener(myListener);\n" + 108 "For more information, see the javadoc for RedundantListenerException class."); 109 } 110 111 private static class MyListener implements MockitoListener {} 112} 113