• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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