1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.annotation.Documented; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.annotation.Retention; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.annotation.Target; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport static java.lang.annotation.ElementType.FIELD; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport static java.lang.annotation.RetentionPolicy.RUNTIME; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/** 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Mark a field as a mock. 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <ul> 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li>Allows shorthand mock creation.</li> 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li>Minimizes repetitive mock creation code.</li> 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li>Makes the test class more readable.</li> 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li>Makes the verification error easier to read because the <b>field name</b> is used to identify the mock.</li> 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </ul> 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * public class ArticleManagerTest extends SampleBaseTestCase { 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Mock private ArticleCalculator calculator; 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Mock(name = "database") private ArticleDatabase dbMock; 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Mock(answer = RETURNS_MOCKS) private UserProvider userProvider; 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Mock(extraInterfaces = {Queue.class, Observer.class}) private articleMonitor; 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * private ArticleManager manager; 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Before public void setup() { 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * manager = new ArticleManager(userProvider, database, calculator, articleMonitor); 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * } 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * } 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * public class SampleBaseTestCase { 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @Before public void initMocks() { 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * MockitoAnnotations.initMocks(this); 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * } 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * } 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <strong><code>MockitoAnnotations.initMocks(this)</code></strong> method has to be called to initialize annotated objects. 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * In above example, <code>initMocks()</code> is called in @Before (JUnit4) method of test's base class. 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * For JUnit3 <code>initMocks()</code> can go to <code>setup()</code> method of a base class. 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <strong>Instead</strong> you can also put initMocks() in your JUnit runner (@RunWith) or use the built-in 52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * {@link org.mockito.runners.MockitoJUnitRunner}. 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </p> 54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see Mockito#mock(Class) 56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see Spy 57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see InjectMocks 58e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see MockitoAnnotations#initMocks(Object) 59e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see org.mockito.runners.MockitoJUnitRunner 60e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 61e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Target(FIELD) 62e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Retention(RUNTIME) 63e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Documented 64e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic @interface Mock { 65e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 66e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Answers answer() default Answers.RETURNS_DEFAULTS; 67e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 68e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson String name() default ""; 69e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 70e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class<?>[] extraInterfaces() default {}; 71e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 72e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson boolean serializable() default false; 73e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson} 74