/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockito; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import org.mockito.junit.MockitoJUnitRunner; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * Mark a field as a mock. * * <ul> * <li>Allows shorthand mock creation.</li> * <li>Minimizes repetitive mock creation code.</li> * <li>Makes the test class more readable.</li> * <li>Makes the verification error easier to read because the <b>field name</b> is used to identify the mock.</li> * </ul> * * <pre class="code"><code class="java"> * public class ArticleManagerTest extends SampleBaseTestCase { * * @Mock private ArticleCalculator calculator; * @Mock(name = "database") private ArticleDatabase dbMock; * @Mock(answer = RETURNS_MOCKS) private UserProvider userProvider; * @Mock(extraInterfaces = {Queue.class, Observer.class}) private articleMonitor; * * private ArticleManager manager; * * @Before public void setup() { * manager = new ArticleManager(userProvider, database, calculator, articleMonitor); * } * } * * public class SampleBaseTestCase { * * @Before public void initMocks() { * MockitoAnnotations.initMocks(this); * } * } * </code></pre> * * <p> * <strong><code>MockitoAnnotations.initMocks(this)</code></strong> method has to be called to initialize annotated objects. * In above example, <code>initMocks()</code> is called in @Before (JUnit4) method of test's base class. * For JUnit3 <code>initMocks()</code> can go to <code>setup()</code> method of a base class. * <strong>Instead</strong> you can also put initMocks() in your JUnit runner (@RunWith) or use the built-in * {@link MockitoJUnitRunner}. * </p> * * @see Mockito#mock(Class) * @see Spy * @see InjectMocks * @see MockitoAnnotations#initMocks(Object) * @see MockitoJUnitRunner */ @Target({FIELD, PARAMETER}) @Retention(RUNTIME) @Documented public @interface Mock { Answers answer() default Answers.RETURNS_DEFAULTS; String name() default ""; Class<?>[] extraInterfaces() default {}; boolean serializable() default false; }