1 /* 2 * Copyright (c) 2017 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 package org.mockitousage; 6 7 import org.junit.Before; 8 import org.junit.Test; 9 import org.mockito.invocation.InvocationOnMock; 10 import org.mockito.stubbing.Answer; 11 12 import static org.mockito.BDDMockito.*; 13 14 15 public class CompilationWarningsTest { 16 17 @Before 18 public void pay_attention_to_compilation_warnings_and_JDK_version() { 19 } 20 21 @Test 22 public void no_warnings_for_most_common_api() throws Exception { 23 doReturn(null).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 24 doReturn("a", 12).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 25 doReturn(1000).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 26 doThrow(new NullPointerException()).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 27 doThrow(new NullPointerException(), new IllegalArgumentException()).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 28 doThrow(NullPointerException.class).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 29 30 doAnswer(ignore()).doReturn(null).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 31 doAnswer(ignore()).doReturn("a", 12).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 32 doAnswer(ignore()).doReturn(1000).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 33 doAnswer(ignore()).doThrow(new NullPointerException()).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 34 doAnswer(ignore()).doThrow(new NullPointerException(), new IllegalArgumentException()).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 35 doAnswer(ignore()).doThrow(NullPointerException.class).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 36 37 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenReturn(null); 38 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenReturn("a", 12L); 39 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenReturn(1000); 40 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenThrow(new NullPointerException()); 41 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenThrow(new NullPointerException(), new IllegalArgumentException()); 42 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenThrow(NullPointerException.class); 43 44 when(mock(IMethods.class).objectReturningMethodNoArgs()).then(ignore()).thenReturn(null); 45 when(mock(IMethods.class).objectReturningMethodNoArgs()).then(ignore()).thenReturn("a", 12L); 46 when(mock(IMethods.class).objectReturningMethodNoArgs()).then(ignore()).thenReturn(1000); 47 when(mock(IMethods.class).objectReturningMethodNoArgs()).then(ignore()).thenThrow(new NullPointerException()); 48 when(mock(IMethods.class).objectReturningMethodNoArgs()).then(ignore()).thenThrow(new NullPointerException(), new IllegalArgumentException()); 49 when(mock(IMethods.class).objectReturningMethodNoArgs()).then(ignore()).thenThrow(NullPointerException.class); 50 51 willReturn(null).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 52 willReturn("a", 12).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 53 willReturn(1000).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 54 willThrow(new NullPointerException()).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 55 willThrow(new NullPointerException(), new IllegalArgumentException()).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 56 willThrow(NullPointerException.class).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 57 58 willAnswer(ignore()).willReturn(null).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 59 willAnswer(ignore()).willReturn("a", 12).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 60 willAnswer(ignore()).willReturn(1000).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 61 willAnswer(ignore()).willThrow(new NullPointerException()).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 62 willAnswer(ignore()).willThrow(new NullPointerException(), new IllegalArgumentException()).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 63 willAnswer(ignore()).willThrow(NullPointerException.class).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 64 65 given(mock(IMethods.class).objectReturningMethodNoArgs()).willReturn(null); 66 given(mock(IMethods.class).objectReturningMethodNoArgs()).willReturn("a", 12L); 67 given(mock(IMethods.class).objectReturningMethodNoArgs()).willReturn(1000); 68 given(mock(IMethods.class).objectReturningMethodNoArgs()).willThrow(new NullPointerException()); 69 given(mock(IMethods.class).objectReturningMethodNoArgs()).willThrow(new NullPointerException(), new IllegalArgumentException()); 70 given(mock(IMethods.class).objectReturningMethodNoArgs()).willThrow(NullPointerException.class); 71 72 given(mock(IMethods.class).objectReturningMethodNoArgs()).will(ignore()).willReturn(null); 73 given(mock(IMethods.class).objectReturningMethodNoArgs()).will(ignore()).willReturn("a", 12L); 74 given(mock(IMethods.class).objectReturningMethodNoArgs()).will(ignore()).willReturn(1000); 75 given(mock(IMethods.class).objectReturningMethodNoArgs()).will(ignore()).willThrow(new NullPointerException()); 76 given(mock(IMethods.class).objectReturningMethodNoArgs()).will(ignore()).willThrow(new NullPointerException(), new IllegalArgumentException()); 77 given(mock(IMethods.class).objectReturningMethodNoArgs()).will(ignore()).willThrow(NullPointerException.class); 78 } 79 80 @Test 81 @SuppressWarnings("unchecked") 82 public void heap_pollution_JDK7plus_warning_avoided_BUT_now_unchecked_generic_array_creation_warnings_ON_JDK5plus_environment() throws Exception { 83 doThrow(NullPointerException.class, IllegalArgumentException.class).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 84 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenThrow(NullPointerException.class, IllegalArgumentException.class); 85 doAnswer(ignore()).doThrow(NullPointerException.class, IllegalArgumentException.class).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 86 87 willThrow(NullPointerException.class, IllegalArgumentException.class).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 88 given(mock(IMethods.class).objectReturningMethodNoArgs()).willThrow(NullPointerException.class, IllegalArgumentException.class); 89 willAnswer(ignore()).willThrow(NullPointerException.class, IllegalArgumentException.class).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 90 } 91 92 @Test 93 public void unchecked_confusing_null_argument_warnings() throws Exception { 94 doReturn(null, (Object[]) null).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 95 doAnswer(ignore()).doReturn(null, (Object[]) null).when(mock(IMethods.class)).objectReturningMethodNoArgs(); 96 when(mock(IMethods.class).objectReturningMethodNoArgs()).thenReturn(null, (Object[]) null); 97 when(mock(IMethods.class).objectReturningMethodNoArgs()).then(ignore()).thenReturn(null, (Object[]) null); 98 willReturn(null, (Object[]) null).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 99 given(mock(IMethods.class).objectReturningMethodNoArgs()).willReturn(null, (Object[]) null); 100 willAnswer(ignore()).willReturn(null, (Object[]) null).given(mock(IMethods.class)).objectReturningMethodNoArgs(); 101 given(mock(IMethods.class).objectReturningMethodNoArgs()).will(ignore()).willReturn(null, (Object[]) null); 102 } 103 104 private static Answer<?> ignore() { 105 return new Answer<Object>() { 106 @Override 107 public Object answer(InvocationOnMock invocation) throws Throwable { 108 return null; 109 } 110 }; 111 } 112 } 113