Home | History | Annotate | Download | only in mockitousage
      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