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 setup()41 public void setup() { 42 MockitoAnnotations.initMocks(this); 43 } 44 45 @Test shouldInitMocks()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 shouldScreamWhenInitializingMocksForNullClass()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 shouldLookForAnnotatedMocksInSuperClasses()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 shouldInitMocksWithGivenSettings()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 getSuperBaseMock()100 public IMethods getSuperBaseMock() { 101 return mock; 102 } 103 } 104 105 class Base extends SuperBase { 106 @Mock private IMethods mock; 107 getBaseMock()108 public IMethods getBaseMock() { 109 return mock; 110 } 111 } 112 113 class Sub extends Base { 114 @Mock private IMethods mock; 115 getMock()116 public IMethods getMock() { 117 return mock; 118 } 119 } 120 } 121