Home | History | Annotate | Download | only in annotation
      1 /*
      2  * Copyright (c) 2007 Mockito contributors
      3  * This program is made available under the terms of the MIT License.
      4  */
      5 
      6 package org.mockitousage.annotation;
      7 
      8 import org.junit.Before;
      9 import org.junit.Test;
     10 import org.mockito.Answers;
     11 import org.mockito.Mock;
     12 import org.mockito.Mockito;
     13 import org.mockito.MockitoAnnotations;
     14 import org.mockito.exceptions.base.MockitoException;
     15 import org.mockitousage.IMethods;
     16 import org.mockitoutil.TestBase;
     17 
     18 import java.lang.annotation.Retention;
     19 import java.lang.annotation.RetentionPolicy;
     20 import java.util.HashMap;
     21 import java.util.List;
     22 import java.util.Map;
     23 import java.util.Set;
     24 
     25 import static org.junit.Assert.*;
     26 import static org.mockito.Mockito.verify;
     27 
     28 public class AnnotationsTest extends TestBase {
     29 
     30     @Retention(RetentionPolicy.RUNTIME)
     31     public @interface NotAMock {}
     32 
     33     @Mock List<?> list;
     34     @Mock final Map<Integer, String> map = new HashMap<Integer, String>();
     35 
     36     @NotAMock Set<?> notAMock;
     37 
     38     @Mock List<?> listTwo;
     39 
     40     @Before
     41     public void setup() {
     42         MockitoAnnotations.initMocks(this);
     43     }
     44 
     45     @Test
     46     public void shouldInitMocks() throws Exception {
     47         list.clear();
     48         map.clear();
     49         listTwo.clear();
     50 
     51         verify(list).clear();
     52         verify(map).clear();
     53         verify(listTwo).clear();
     54     }
     55 
     56     @Test
     57     public void shouldScreamWhenInitializingMocksForNullClass() throws Exception {
     58         try {
     59             MockitoAnnotations.initMocks(null);
     60             fail();
     61         } catch (MockitoException e) {
     62             assertEquals("testClass cannot be null. For info how to use @Mock annotations see examples in javadoc for MockitoAnnotations class",
     63                     e.getMessage());
     64         }
     65     }
     66 
     67     @Test
     68     public void shouldLookForAnnotatedMocksInSuperClasses() throws Exception {
     69         Sub sub = new Sub();
     70         MockitoAnnotations.initMocks(sub);
     71 
     72         assertNotNull(sub.getMock());
     73         assertNotNull(sub.getBaseMock());
     74         assertNotNull(sub.getSuperBaseMock());
     75     }
     76 
     77     @Mock(answer = Answers.RETURNS_MOCKS, name = "i have a name") IMethods namedAndReturningMocks;
     78     @Mock(answer = Answers.RETURNS_DEFAULTS) IMethods returningDefaults;
     79     @Mock(extraInterfaces = {List.class}) IMethods hasExtraInterfaces;
     80     @Mock() IMethods noExtraConfig;
     81     @Mock(stubOnly=true) IMethods stubOnly;
     82 
     83     @Test
     84     public void shouldInitMocksWithGivenSettings() throws Exception {
     85         assertEquals("i have a name", namedAndReturningMocks.toString());
     86         assertNotNull(namedAndReturningMocks.iMethodsReturningMethod());
     87 
     88         assertEquals("returningDefaults", returningDefaults.toString());
     89         assertEquals(0, returningDefaults.intReturningMethod());
     90 
     91         assertTrue(hasExtraInterfaces instanceof List);
     92         assertTrue(Mockito.mockingDetails(stubOnly).getMockCreationSettings().isStubOnly());
     93 
     94         assertEquals(0, noExtraConfig.intReturningMethod());
     95     }
     96 
     97     class SuperBase {
     98         @Mock private IMethods mock;
     99 
    100         public IMethods getSuperBaseMock() {
    101             return mock;
    102         }
    103     }
    104 
    105     class Base extends SuperBase {
    106         @Mock private IMethods mock;
    107 
    108         public IMethods getBaseMock() {
    109             return mock;
    110         }
    111     }
    112 
    113     class Sub extends Base {
    114         @Mock private IMethods mock;
    115 
    116         public IMethods getMock() {
    117             return mock;
    118         }
    119     }
    120 }
    121